spring結合quartz的定時的2種方式

 iLife's 博客http://blog.csdn.net/fei1502816 

 

1、 Spring 的org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean類,使用此方法使開發人員對Quartz完全透明,需要實現定時任務的方法只是一個普通方法。

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
    <!--    
    方法一:   
    Spring 的org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean類,   
    使用此方法使開發人員對Quartz完全透明,需要實現定時任務的方法只是一個普通方法。   
     -->  
    <!--1、 配置文件中添加業務類,該類爲調用的工作類 -->  
    <bean id="businessWork" class="com.morningstar.quartz.BusinessWork" />     
       
    <!-- 2、定義任務,在spring文件中配置代理類 ,定義調用對象和調用對象的方法-->    
    <bean id="businessTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">     
        <!-- 調用的類 -->           
        <property name="targetObject" ref="businessWork"/>  
         <!-- 調用類中的方法 -->  
        <property name="targetMethod" value="generateReport"/>    
        <!-- false,證明不執行併發任務 -->  
        <property name="concurrent" value="false"/>      
    </bean>    
    <!-- 3、配置觸發器,定義觸發時間,可以根據不同的時間對同一個任務定義多個觸發器,下面是每隔5秒調用一個方法配置-->  
    <!-- cron表達式 -->  
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="businessTask"/>  
        <property name="cronExpression" value="10,15,20,25,30,35,40,45,50,55 * * * * ?"/>  
    </bean>  
  
    <!-- 4、配置調度器 ,容器啓動就會執行調度程序  -->  
     <!-- 總管理類,如果lazy-init='false',則容器啓動時就會執行調度程序-->     
     <!-- 如果lazy-init='true',則需要實例化該bean才能執行調度程序            -->     
    <bean id="schdulerFactory" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="cronTrigger"/>  
            </list>  
        </property>  
    </bean>  
</beans>  

2、藉助於Spring的org.springframework.scheduling.quartz.JobDetailBean的類功能, 繼承 Spring封裝Quartz的org.springframework.scheduling.quartz.QuartzJobBean類,實現 executeInternal方法,executeInternal方法中調用業務類。

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
    <!--    
    方法二:   
    藉助於Spring的org.springframework.scheduling.quartz.JobDetailBean的類功能,   
    繼承 Spring封裝Quartz的org.springframework.scheduling.quartz.QuartzJobBean類,實現 executeInternal方法,   
    executeInternal方法中調用業務類   
     -->  
    <!-- 1、定義任務,在spring文件中配置代理類 ,定義調用對象和調用對象的方法-->    
    <bean id="businessTask" class="org.springframework.scheduling.quartz.JobDetailBean">     
        <!-- 調用的類 -->           
        <property name="jobClass" value="com.morningstar.quartz.BusinessWork"/>  
        <!-- 主要是爲了在定時任務需要使用到Bean,通過Spring給注入進來,如果不寫明,就會報java.lang.NullPointerException錯誤 -->  
        <!--     
        <property name="jobDataAsMap">  
            <map>  
                <entry key="someService">  
                    <ref bean="someService" />  
                </entry>  
            </map>  
        </property>  
        -->  
    </bean>    
       
    <!-- 2、配置觸發器,定義觸發時間,可以根據不同的時間對同一個任務定義多個觸發器-->  
    <!-- cron表達式 -->  
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="businessTask"/>  
        <property name="cronExpression" value="10,15,20,25,30,35,40,45,50,55 * * * * ?"/>  
    </bean>  
  
    <!-- 3、配置調度器 ,容器啓動就會執行調度程序  -->  
     <!-- 總管理類,如果lazy-init='false',則容器啓動時就會執行調度程序-->     
     <!-- 如果lazy-init='true',則需要實例化該bean才能執行調度程序            -->     
    <bean id="schdulerFactory" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="cronTrigger"/>  
            </list>  
        </property>  
    </bean>  
</beans>  

 

 iLife's 博客http://blog.csdn.net/fei1502816 

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