Spring提供了简单方便的的Quartz定时任务框架
使用时除了导入spring基础jar包,还需要quartz jar包
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.5</version> </dependency>新建一个任务类,里面包含执行的方法
public class TaskJob { private static final Logger logger = LoggerFactory.getLogger(TaskJob.class); public void sayHello() { logger.info("定时任务开始........"); System.out.println("时间:" + DateUtils.now() + "大家好......"); logger.info("定时任务结束........"); } }新建spring配置文件
引入该类
<bean name="taskJob" class="com.tc.itfarm.web.task.TaskJob"/>设置定时任务,执行的类和方法
<bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="taskJob"/> </property> <property name="targetMethod"> <value>sayHello</value> </property> </bean>
添加一个任务触发器,配置执行的任务和执行时间,下面配置的是从1点到24点 没隔一分钟执行一次
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="methodInvokingJobDetail"/> </property> <property name="cronExpression"> <value>0 * 01-24 * * ?</value> </property> </bean>然后在任务调度工厂,添加该触发器
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="cronTrigger"/> </list> </property> </bean>写个测试类,加载该配置文件,或者部署到tomcat启动
执行结果如下
时间:Wed Aug 10 08:39:00 CST 2016大家好......
2016-08-10 08:39:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1:637919 ] - [ INFO ] 定时任务结束........
2016-08-10 08:40:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2:697918 ] - [ INFO ] 定时任务开始........
时间:Wed Aug 10 08:40:00 CST 2016大家好......
2016-08-10 08:40:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2:697919 ] - [ INFO ] 定时任务结束........
2016-08-10 08:41:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3:757919 ] - [ INFO ] 定时任务开始........
时间:Wed Aug 10 08:41:00 CST 2016大家好......
2016-08-10 08:41:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3:757920 ] - [ INFO ] 定时任务结束........
2016-08-10 08:42:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4:817938 ] - [ INFO ] 定时任务开始........
时间:Wed Aug 10 08:42:00 CST 2016大家好......
2016-08-10 08:42:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4:817938 ] - [ INFO ] 定时任务结束........
2016-08-10 08:43:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-5:877919 ] - [ INFO ] 定时任务开始........
时间:Wed Aug 10 08:43:00 CST 2016大家好......
2016-08-10 08:43:00 [ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-5:877919 ] - [ INFO ] 定时任务结束........
cronExpression的配置说明,具体使用以及参数请百度google
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
- 区间
* 通配符
? 你不想设置那个字段
下面只例出几个式子
CRON表达式 含义
"0 0 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:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发
对应 秒 分 小时 日期 月份 星期 年