如 果您使用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:
• 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 的实例以呼叫目标物件的指定方法。