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());
}
}
这里同时执行了两个定时任务,看看效果
上面的方法如果是多个定时就会比较冗余了,所以我们可以使用另外一个方法:
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 表达式由五部分组成:分 时 天 月 周
* 分 :从 0 到 59
* 时 :从 0 到 23
* 天 :从 1 到 31,字母 L 可以表示月的最后一天
* 月 :从 1 到 12,可以别名: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("执行了任务");
}
}
推荐阅读