Quartz是纯Java开发的工作任务调度框架,可以与各种Java框架配合使用,也可以独立运行。一般在项目中实现定时任务。
根据官方的描述Quartz可以支持,一个、多个乃至万个定时任务,个人不太敢这么尝试,如果那么多定时任务的话,性能实在怕拖累了。不过也可以看出Quartz对自己的性能是很有自信的。
本文讲解在Spring环境下以注解的方式如何实现Quartz,用后发现这个简单的实在不像话,哪像一个拥有如此强大功能的框架的配置过程啊,简直是傻瓜型的。
在spring.xml文件中增加一行配置
<task:annotation-driven></task:annotation-driven>
注意,这个配置用到了task标签,因此需要在beans标签上增加如下配置:
xmlns:task="http://www.springframework.org/schema/task"
在xsi:schemaLocation中增加:
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
就这么简单,Quartz的配置就完成了
写一个Quartz的测试类和方法
代码如下:
package com.wskj.app.quartz; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class TestQuartz { @Scheduled(cron = "*/4 * * * * ? ") public void printab(){ System.out.println("Hello,"+new Date()); } }
解释说明:
@Component注解:通知Spring,该类将愿意被Spring作为一个组件管理。
@Scheduled注解:声明这是一个定时执行的任务。
cron属性:定义了CronTrigger,什么时间触发执行。
CronTrigger解释
CronTrigger配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年]
序号 说明 是否必填 允许填写的值 允许的通配符
1 秒 是 0-59 , - * /
2 分 是 0-59 , - * /
3 小时 是 0-23 , - * /
4 日 是 1-31 , - * ? / L W
5 月 是 1-12 or JAN-DEC , - * /
6 周 是 1-7 or SUN-SAT , - * ? / L #
7 年 否 empty 或 1970-2099 , - * /
举例如下:
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分触发(光棍节)