二手技術:
JDK 1.6.0_21
春天3.1.1
石英1.8.5 Maven的3.0.2
步驟1:建立已完成的專案
創建一個Maven項目,如下所示。 (可以使用Maven或IDE插件創建)

步驟2:圖書館
Spring依賴項已添加到Maven的pom.xml中。
<!-- Spring 3 dependencies -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version>
</dependency>
第3步:創建任務類別
將創建一個FirstTask類。
package com.otv.task;import org.apache.log4j.Logger;/*** First Task** @author onlinetechvision.com* @since 24 Feb 2012* @version 1.0.0**/
public class FirstTask {private static Logger log = Logger.getLogger(FirstTask.class);/*** Execute this task**/public void execute() {log.debug("FirstTask runs successfully...");}
}
將創建SecondTask類。
package com.otv.task;import org.apache.log4j.Logger;/*** Second Task** @author onlinetechvision.com* @since 24 Feb 2012* @version 1.0.0**/
public class SecondTask {private static Logger log = Logger.getLogger(SecondTask.class);/*** Execute this task**/public void execute() {log.debug("SecondTask runs successfully...");}
}
第4步:創建ISchedulerService接口
ISchedulerService接口已創建。
package com.otv.service;/*** Scheduler Service Interface** @author onlinetechvision.com* @since 24 Feb 2012* @version 1.0.0**/
public interface ISchedulerService {/*** Execute First Task** @param* @throws* @return*/public void executeFirstTask();/*** Execute Second Task** @param* @throws* @return*/public void executeSecondTask();
}
步驟5:創建SchedulerService類別
SchedulerService類是通過實現ISchedulerService接口創建的。 該服務計劃任務。
package com.otv.service;import com.otv.task.FirstTask;
import com.otv.task.SecondTask;/*** Scheduler Service Implementation** @author onlinetechvision.com* @since 24 Feb 2012* @version 1.0.0**/
public class SchedulerService implements ISchedulerService {private FirstTask firstTask;private SecondTask secondTask;/*** Execute First Task**/public void executeFirstTask() {getFirstTask().execute();}/*** Execute Second Task**/public void executeSecondTask() {getSecondTask().execute();}/*** Get First Task** @return FirstTask*/public FirstTask getFirstTask() {return firstTask;}/*** Set First Task** @param firstTask First Task*/public void setFirstTask(FirstTask firstTask) {this.firstTask = firstTask;}/*** Get Second Task** @return SecondTask*/public SecondTask getSecondTask() {return secondTask;}/*** Set Second Task** @param secondTask Second Task*/public void setSecondTask(SecondTask secondTask) {this.secondTask = secondTask;}
}
步驟6:建立應用程式類別
應用程序類已創建。 此類運行應用程序。
package com.otv.starter;import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Application Starter Class** @author onlinetechvision.com* @since 24 Feb 2012* @version 1.0.0**/
public class Application {/*** Main method of the Application**/public static void main(String[] args) {new ClassPathXmlApplicationContext("applicationContext.xml");}
}
步驟7:定義作業詳細信息配置
在Spring中,可以通過兩種方式定義作業詳細信息 。 通過使用MethodInvokingJobDetailFactoryBean或擴展QuartzJobBean 。 在此示例中,已使用MethodInvokingJobDetailFactoryBean方法。 將targetObject和targetMethod屬性提供給MethodInvokingJobDetailFactoryBean 。
<!-- Job Details-->
<bean id="FirstTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeFirstTask" />
</bean><bean id="SecondTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeSecondTask" />
</bean>
步驟8:定義觸發配置
在Spring中也可以通過兩種方式定義觸發器 。 通過定義SimpleTriggerBean或CronTriggerBean 。 使用SimpleTriggerBean時 ,將定義jobDetail , repeatInterval和startDelay屬性。 使用CronTriggerBean時 ,將定義jobDetail和cronExpression屬性。 在此示例中,第一個任務的重復間隔已設置為5秒 ,第二個任務的重復間隔已設置為12秒 。
<!-- Simple Trigger -->
<bean id="FirstSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="FirstTaskJobDetail" /><property name="repeatInterval" value="5000" /><property name="startDelay" value="1000" />
</bean><!-- <bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="repeatInterval" value="12000" /><property name="startDelay" value="1000" /></bean> -->???<!-- Cron Trigger -->
<bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="cronExpression" value="0/12 * * * * ?" />
</bean>
步驟9:定義SchedulerFactoryBean配置
最后,通過創建SchedulerFactoryBean配置作業詳細信息和觸發器 。
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="jobDetails"><list><ref bean="FirstTaskJobDetail" /><ref bean="SecondTaskJobDetail" /></list></property><property name="triggers"><list><ref bean="FirstSimpleTrigger" /><ref bean="SecondSimpleTrigger" /></list></property>
</bean>
步驟10:創建applicationContext.xml
所有applicationContext.xml內容如下所示。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- Beans Declaration --><bean id="FirstTask" class="com.otv.task.FirstTask"></bean><bean id="SecondTask" class="com.otv.task.SecondTask"></bean><bean id="SchedulerService" class="com.otv.service.SchedulerService"><property name="firstTask" ref="FirstTask" /><property name="secondTask" ref="SecondTask" /></bean><!-- Job Details--><bean id="FirstTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeFirstTask" /></bean><bean id="SecondTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeSecondTask" /></bean><!-- Simple Trigger --><bean id="FirstSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="FirstTaskJobDetail" /><property name="repeatInterval" value="5000" /><property name="startDelay" value="1000" /></bean>
<!--<bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="repeatInterval" value="12000" /><property name="startDelay" value="1000" /></bean>
--><!-- Cron Trigger --><bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="cronExpression" value="0/12 * * * * ?" /></bean><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="jobDetails"><list><ref bean="FirstTaskJobDetail" /><ref bean="SecondTaskJobDetail" /></list></property><property name="triggers"><list><ref bean="FirstSimpleTrigger" /><ref bean="SecondSimpleTrigger" /></list></property></bean></beans>
步驟11:運行項目
啟動應用程序類后,將在下面顯示輸出日志:
25.02.2012 00:17:18 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:23 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:24 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:28 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:33 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:36 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:38 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:43 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:48 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:48 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:53 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:58 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:18:00 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
步驟12:下載
OTV_SpringQuartz_MultiJobScheduling
參考: JCG合作伙伴提供的 使用Spring和Quartz的多作業計劃服務 ? 在線技術愿景博客上的Eren Avsarogullari。
翻譯自: https://www.javacodegeeks.com/2012/02/spring-and-quartz-multi-job-scheduling.html