天天看點

Spring定時架構Quartz的使用

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觸發 

對應 秒 分 小時 日期 月份 星期 年