天天看點

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

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

[html]

<?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方法中調用業務類。

[html]

<?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>