JFinal和JBoot创建一个定时任务

在Spring环境下, 用SpringTask就可以很好的实现定时任务了, 但是如果是用的JFinal和JBoot, 怎么来实现定时任务呢?

1. 第一种方式

1.1 引入依赖

<!--定时任务-->
<dependency>
    <groupId>cn.dreampie</groupId>
    <artifactId>jfinal-quartz</artifactId>
    <version>RELEASE</version>
</dependency>

1.2 找到添加插件Plugin的地方

JFinal的话,代码如下:

public void configPlugin(Plugins me) {
    //...其他插件

    /*配置定时任务*/
    QuartzPlugin quartz = new QuartzPlugin();
    quartz.setJobs("quarter.properties");   //下面创建properties文件名称
    me.add(quartz);
}

JBoot的话,代码如下:

 @Override
    public void onJfinalPluginConfig(JfinalPlugins plugins) {
        QuartzPlugin quartz = new QuartzPlugin();
        quartz.setJobs("quarter.properties");
        plugins.add(quartz);
        super.onJfinalPluginConfig(plugins);
    }

可能会有差异 , 直接全局搜索plugins找到相似的,add添加进去就好了

 1.3 定义一个quarter.properties文件,放置在resources文件夹下,其中写上其中的属性

多个定时任务, 用channer_1 , channer_2来区分

#需要定时的类
job.channel_1.class = com.hz.shop.api.gateway.task.GoodsTimedTask
job.channel_1.group = default
job.channel_1.id = 1
# 每10秒执行一次
job.channel_1.cron = 0/10 * * * * ?
job.channel_1.enable = true


#需要定时的类
job.channel_2.class = com.hz.shop.api.gateway.task.GoodsTimedTask2
job.channel_2.group = default
job.channel_2.id = 1
# 每10秒执行一次
job.channel_2.cron = 0/15 * * * * ?
job.channel_2.enable = true

cron的话,可以去这个网址根据需求生成
CRON表达式在线生成

1.4 创建需要定时类,此类需要实现Job接口(此处实现的是org.quartz.Job)

package com.hz.shop.api.gateway.task;


import com.hz.shop.framework.utils.DateUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 商品相关定时任务
 * @author zgd
 * @time 2018年7月20日10:57:50
 */
public class GoodsTimedTask implements Job {

    private static final Logger logger = LoggerFactory.getLogger(GoodsTimedTask.class);

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("任务执行了"+DateUtils.getDate());
    }
}

这里同时执行了两个定时任务,看看效果
这里写图片描述

上面的方法如果是多个定时就会比较冗余了,所以我们可以使用另外一个方法:

2. 第二种方式

2.1 依赖

<dependency>
    <groupId>it.sauronsoftware.cron4j</groupId>
    <artifactId>cron4j</artifactId>
    <version>2.2.5</version>
</dependency>

2.2 注册插件

跟上面一样,找到合适的地方,添加插件


public void configPlugin(Plugins me) {
    Cron4jPlugin cp = new Cron4jPlugin(PropKit.use("quarter.properties"), "cron4j");
    me.add(cp);
}

2.3 quarter.properties配置文件

task1.cron = 0/5 * * * *
task1.class = com.hz.shop.api.gateway.task.GoodsTimedTask
task1.daemon = true
task1.enable = true

task2.cron = 0/5 * * * ?
task2.class = com.hz.shop.api.gateway.task.GoodsTimedTask2
task2.daemon = flase
task2.enable = true

不过这里要注意, 这里的cron 的表达式,没有秒,最小单位是分. 所以只有5个域

0/5 * * * ?

* cron 表达式由五部分组成:分 时 天 月 周
* 分 :从 059
* 时 :从 023
* 天 :从 131,字母 L 可以表示月的最后一天
* 月 :从 112,可以别名:jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov" and "dec"
* 周 :从 0 到 6,0 表示周日,6 表示周六,可以使用别名: "sun", "mon", "tue", "wed", "thu", "fri" and "sat"
*
* 数字 n:表示一个具体的时间点,例如 5 * * * * 表示 5 分这个时间点时执行
* 逗号 , :表示指定多个数值,例如 3,5 * * * * 表示 3 和 5 分这两个时间点执行
* 减号 -:表示范围,例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行
* 星号 *:表示每一个时间点,例如 * * * * * 表示每分钟执行
* 除号 /:表示指定一个值的增加幅度。例如 n/m表示从 n 开始,每次增加 m 的时间点执行

2.4 创建定时类,此类需要实现Runnable接口,其实就是开启一个线程

public class GoodsTimedTask implements Runnable {
    @Override
    public void run() {
        System.out.println("执行了任务");
    }
}

猜你喜欢

转载自blog.csdn.net/zzzgd_666/article/details/81131817