jfinal中quartz定时任务的使用

第一步,导包

<dependency>
	<groupId>cn.dreampie</groupId>
	<artifactId>jfinal-quartz</artifactId>
	<version>0.2</version>
</dependency>

第二步,在配置文件的configPlugin方法中添加如下代码

/**
 * 配置插件
 */
public void configPlugin(Plugins me) {
	// 配置 druid 数据库连接池插件
	DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
	me.add(druidPlugin);
	
	// 配置ActiveRecord插件
	ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
	// 所有映射在 MappingKit 中自动化搞定
	_MappingKit.mapping(arp);
	me.add(arp);
	
	//邮件插件
	me.add(new MailPlugin(PropKit.use("mail.properties").getProperties()));
	
	// 配置定时任务
	QuartzPlugin quartzPlugin = new QuartzPlugin();
	quartzPlugin.setJobs("quartzJob.properties");
	me.add(quartzPlugin);
}

第三步,添加QuartzJob.java,代码如下

package com.demo.controller;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class QuartzJob implements Job {

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// 要执行的内容
		System.out.println("test");
	}

}

第四步,在src/main/resources/添加quartzJob.properties文件

#执行定时任务的类的路径
job.channel.class=com.demo.controller.QuartzJob
job.channel.group=default
job.channel.id=1
#设置执行时间
#job.channel.cron=0 0 23 * * ?
#是否运行
job.channel.enable=true

最后,附上一些常用的quartz表达式:

在线cron表达式生成:http://cron.qqe2.com/?tdsourcetag=s_pcqq_aiomsg

0 0 12 * * ? 每天12点触发

0 15 10 ? * * 每天10点15分触发

0 15 10 * * ? 每天10点15分触发

0 15 10 * * ? * 每天10点15分触发

0 15 10 * * ? 2005 2005年每天10点15分触发

0 * 14 * * ? 每天下午的 2点到2点59分每分触发

0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)

0 0/5 14,18 * * ? 每天下午的 2点到2点59分、18点到18点59分(整点开始,每隔5分触发)

0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发

0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发

0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发

0 15 10 15 * ? 每月15号上午10点15分触发

0 15 10 L * ? 每月最后一天的10点15分触发

0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发

0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发

0 15 10 ? * 6#3 每月的第三周的星期五开始触发

0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次

0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)

添加cron4j的使用:

  1. 添加依赖
<dependency>
    <groupId>it.sauronsoftware.cron4j</groupId>
    <artifactId>cron4j</artifactId>
    <version>2.2.5</version>
</dependency>
  1. 在src/main/resources/添加quartzJob.properties文件
cron4j=task1, task2
# 测试为每分钟执行一次
task1.cron=*/1 * * * *
task1.class=com.solomo.controller.Test01
task1.daemon=true
task1.enable=true
 
task2.cron=*/1 * * * *
task2.class=com.solomo.controller.Test02
task2.daemon=true
task2.enable=true
  1. 在配置文件的configPlugin方法中添加如下代码
Cron4jPlugin cron4jPlugin = new Cron4jPlugin(PropKit.use("quartzJob.properties"), "cron4j");
me.add(cron4jPlugin);
  1. 使用(分别是Test01.java与Test02.java)
package com.solomo.controller;

public class Test01 implements Runnable {

	@Override
	public void run() {
		System.out.println("Test01");
	}
}

package com.solomo.controller;

public class Test02 implements Runnable {
	@Override
	public void run() {
		System.out.println("Test02");
	}
}

效果如下:
在这里插入图片描述
最后附上表达式详解:

cron 表达式最多只允许五部分,每部分用空格分隔开来,这五部分从左到右依次表示分、时、天、月、周,其具体规则如下: 
分 :从 059 
时 :从 023 
天 :从 131,字母 L 可以表示月的最后一天 
月 :从 112,可以别名:jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov" and "dec" 
周 :从 060 表示周日,6 表示周六,可以使用别名: "sun", "mon", "tue", "wed", "thu", "fri" and "sat" 
 
如上五部分的分、时、天、月、周又分别支持如下字符,其用法如下: 
数字 n:表示一个具体的时间点,例如 5 * * * * 表示 5 分这个时间点时执行 
逗号 , :表示指定多个数值,例如 3,5 * * * * 表示 35 分这两个时间点执行 
减号 -:表示范围,例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行 
星号 *:表示每一个时间点,例如 * * * * * 表示每分钟执行 
除号 /:表示指定一个值的增加幅度。例如 */5表示每隔5分钟执行一次(序列:0:00, 0:05, 0:10, 0:15 等等)。再例如3-18/5 * * * * 是指在从318分钟值这个范围之中每隔5分钟执行一次(序列:0:03, 0:08, 0:13, 0:18, 1:03, 1:08 等等)。 
 
常见错误:cron4j在表达式中使用除号指定增加幅度时与linux稍有不同。例如在linux中表达式 10/3 * * * * 的含义是从第10分钟开始,每隔三分钟调度一次,而在cron4j中需要使用 10-59/3 * * * * 来表达。避免这个常见错误的技巧是:当需要使用除号指定增加幅度时,始终指定其范围。 
 
基于上面的技巧,每隔2分钟调度一次的表达式为:0-59/2 * * * * 或者 */2 * * * * , 而不能是0/2 * * * *

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值