欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JFinal和JBoot创建一个定时任务

程序员文章站 2023-12-23 19:38:15
...

在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());
    }
}

这里同时执行了两个定时任务,看看效果
JFinal和JBoot创建一个定时任务

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

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("执行了任务");
    }
}

上一篇:

下一篇: