使用 MethodInvokingJobDetailFactoryBean(任务调度框架 其中一种方法)


如 果您使用Spring的話,您並不一定要繼承QuartzJobBean類別來定義一個 Job類別,Spring提供 org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean, 可以讓您直接指定呼叫某個物件的方法,例如改寫一下  使用 Quartz 的DemoJob類別:
  • DemoJob.java
package onlyfun.caterpillar;

public class DemoJob {
    private JobData jobData;
    
    public void execute() {
        System.out.println(
                jobData.getData() + " is executed.");
    }
    
    public void setJobData(JobData jobData) {
        this.jobData = jobData;
    }
    
    public JobData getJobData() {
        return jobData;
    }
} 

接著只要在 Bean定義檔中使用MethodInvokingJobDetailFactoryBean即可,例如改寫一下QuartzDemo專案中的beans-config.xml:
  • beans-config.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
  "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 
    <bean id="someData" 
          class="onlyfun.caterpillar.JobData"/>

    <bean id="someJob" 
          class="onlyfun.caterpillar.DemoJob">          
        <property name="jobData">
            <ref bean="someData"/>
        </property>           
    </bean>

    <bean id="jobDetailBean" 
          class="org.springframework.scheduling.
                   → quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="someJob"/>
        </property> 
        <property name="targetMethod">
            <value>execute</value>
        </property>       
    </bean>

    <bean id="cronTriggerBean" 
          class="org.springframework.scheduling.
                   → quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="jobDetailBean"/>
        </property>
        <property name="cronExpression">
            <value>0 30 18 * * ?</value>
        </property>
    </bean>
    
    <bean id="schedulerFactoryBean" 
          class="org.springframework.scheduling.
                   → quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTriggerBean"/>
            </list>
        </property>
    </bean>
</beans>

在上面的指定中,每天的18時30分都會執行指定的任務,在底層,MethodInvokingJobDetailFactoryBean會自動建立JobDetail的實例以呼叫目標物件的指定方法。

你可能感兴趣的:(使用 MethodInvokingJobDetailFactoryBean(任务调度框架 其中一种方法))