如
果您使用Spring的話,您並不一定要繼承QuartzJobBean類別來定義一個Job類別,Spring提供
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean,
可以讓您直接指定呼叫某個物件的方法,例如改寫一下 使用 Quartz 的DemoJob類別:
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:
<?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的實例以呼叫目標物件的指定方法。
|