一、增加所依賴的JAR包
1、增加Spring的Maven依賴
Xml代碼
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>3.0.5.RELEASE</version>
- </dependency>
2、增加Quartz的Maven依賴
Xml代碼
- < dependency >
- < groupId > org.quartz-scheduler </ groupId >
- < artifactId > quartz </ artifactId >
- < version > 1.8.4 </ version >
- </ dependency >
二、Spring整合Quartz的兩種方法
1、使用JobDetailBean
創建job,繼承QuartzJobBean ,實現 executeInternal(JobExecutionContext jobexecutioncontext)方法。這種方法和在普通的Quartz編程中是一樣的。
JobDetail對象包含運行一個job的所有信息。 Spring Framework提供了一個JobDetailBean,包含運行一個job的所有信息。
Xml代碼
- <bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass" value="example.ExampleJob" />
- <property name="jobDataAsMap">
- <map>
- <entry key="timeout" value="5" />
- </map>
- </property>
- </bean>
job data map(jobDataAsMap)可通過JobExecutionContext (執行時傳遞)獲取。JobDetailBean將 job data map的屬性映射到job的屬性。如例所示,如果job類中包含一個job data map中屬性,JobDetailBean將自動應用,可用於傳遞參數:
Java代碼
- public class ExampleJob extends QuartzJobBean{
-
- private int timeout;
-
- /**
- * Setter called after the ExampleJob is instantiated with the value from
- * the JobDetailBean (5)
- */
- public void setTimeout(int timeout) {
- this.timeout = timeout;
- }
-
- /**
- *
- * 業務邏輯處理
- *
- */
-
- protected void executeInternal(JobExecutionContext ctx)
- throws JobExecutionException {
- // do the actual work
- }
- }
2、使用MethodInvokingJobDetailFactoryBean
通過MethodInvokingJobDetailFactoryBean在運行中動態生成,需要配置執行任務的目標類、目標方法。但是這種方法動態生成的JobBean不支持序列號,也就是說Job不能存到持久化。
通常用於調用特定對象的一個方法。不用創建單獨的job對象,只需要建立正常的業務對象,用這樣方式去調用其中的一個方法。
Xml代碼
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="exampleBusinessObject" />
- <property name="targetMethod" value="doIt" />
- <property name="arguments">
- <list>
- <!-- a primitive type (a string) -->
- <value>1st</value>
- <!-- an inner object definition is passed as the second argument -->
- <object type="Whatever.SomeClass, MyAssembly" />
- <!-- a reference to another objects is passed as the third argument -->
- <ref object="someOtherObject" />
- <!-- another list is passed as the fourth argument -->
- <list>
- <value>http://www.springframework.net/</value>
- </list>
- </list>
- </property>
-
- <property name="concurrent" value="false" />
- </bean>