Quartz+Spring 實例 配置

1. javabean 類

在Test.QuartzJob中

package Test;

public class QuartzJob {
    public void work(){
        System.out.println("Quartz的任務調度!!!");
    }
}

 

2. 配置Spring的XML文件

建一個applicationContext.xml,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
        <!-- 要調用的工作類 -->
        <bean id="quartzJob" class="Test.QuartzJob"></bean>
        <!-- 定義調用對象和調用對象的方法 -->
        <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 調用的類 -->
            <property name="targetObject">
                <ref bean="quartzJob"/>
            </property>
            <!-- 調用類中的方法 -->
            <property name="targetMethod">
                <value>work</value>
            </property>
        </bean>
        <!-- 定義觸發時間 -->
        <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
                <ref bean="jobtask"/>
            </property>
            <!-- cron表達式 -->
            <property name="cronExpression">
                <!-- 每隔10秒執行一次-->
                <value>0/10 * * * * ?</value>
            </property>
        </bean>
        <!-- 總管理類 如果將lazy-init='false'那麼容器啓動就會執行調度程序 -->
        <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="doTime"/>
                </list>
            </property>
        </bean>
   
</beans>


3. 配置web.xml對Spring的加載

<!-- 加載spring -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
    /WEB-INF/classes/applicationContext*.xml
   </param-value>
</context-param>
<servlet>
   <servlet-name>context</servlet-name>
   <servlet-class>
    org.springframework.web.context.ContextLoaderServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>


注意:

1.導入quartz-1.6.2.jar 下載

2.導入spring.jar 下載

3. 你會問爲什麼用spring後就不用quartz.properties、quartz-jobsxml 這兩個文件了麼?
我回答:是的,它會自動找到quartz包中默認的這兩個文件,如果你有特殊需要,也可以自己定義這兩個文件。

附:quartz.properties

#
# Configure Main Scheduler Properties 
#
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
#
# Configure ThreadPool 
#
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 4
#
# Configure JobStore 
#
#org.quartz.jobStore.misfireThreshold = 5000
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
# ===========================================================================
# Configure SchedulerPlugins ===============================================
# ===========================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
#org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
#org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName =quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true


系統會根據配置文件找到quartz_jobs.xml

from: sambino

 

 

附:Quartz 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  , - * / 
通配符說明: 
* 表示所有值. 例如:在分的字段上設置 "*",表示每一分鐘都會觸發。 
? 表示不指定值。使用的場景爲不需要關心當前設置這個字段的值。例如:要在每月的10號觸發一個操作,但不關心是周幾,所以需要周位置的那個字段設置爲"?" 具體設置爲 0 0 0 10 * ? - 表示區間。例如 在小時上設置 "10-12",表示 10,11,12點都會觸發。 
, 表示指定多個值,例如在周字段上設置 "MON,WED,FRI" 表示週一,週三和週五觸發 
/ 用於遞增觸發。如在秒上面設置"5/15" 表示從5秒開始,每增15秒觸發(5,20,35,50)。 在月字段上設置'1/3'所示每月1號開始,每隔三天觸發一次。 
L 表示最後的意思。在日字段設置上,表示當月的最後一天(依據當前月份,如果是二月還會依據是否是潤年[leap]), 在周字段上表示星期六,相當於"7"或"SAT"。如果在"L"前加上數字,則表示該數據的最後一個。例如在周字段上設置"6L"這樣的格式,則表示“本月最後一個星期五"  
W 表示離指定日期的最近那個工作日(週一至週五). 例如在日字段上設置"15W",表示離每月15號最近的那個工作日觸發。如果15號正好是週六,則找最近的週五(14號)觸發, 如果15號是周未,則找最近的下週一(16號)觸發.如果15號正好在工作日(週一至週五),則就在該天觸發。如果指定格式爲 "1W",它則表示每月1號往後最近的工作日觸發。如果1號正是週六,則將在3號下週一觸發。(注,"W"前只能設置具體的數字,不允許區間"-"). 
小提示 
'L'和 'W'可以一組合使用。如果在日字段上設置"LW",則表示在本月的最後一個工作日觸發(一般指發工資 )  
# 序號(表示每月的第幾個周幾),例如在周字段上設置"6#3"表示在每月的第三個週六.注意如果指定"#5",正好第五週沒有周六,則不會觸發該配置(用在母親節和父親節再合適不過了) 
小提示 
周字段的設置,若使用英文字母是不區分大小寫的 MON 與mon相同. 
          

常用示例:   
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 * * ?             每天下午的 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分觸發(光棍節)

發佈了30 篇原創文章 · 獲贊 4 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章