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觸發
對應 秒 分 小時 日期 月份 星期 年