spring集成quartz有兩種方式:
1. JobDetailBean.
2. MethodInvokeJobDetailFactoryBean.
注意:spring集成quartz,除了基本的jar包之外,還需要引入spring-support架包
<!-- spring-support.jar 這個jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),郵件服務,腳本服務(JRuby),
緩存Cache(EHCache),任務計劃Scheduling(uartz)方面的類。
外部依賴spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
1、JobDetailBean
1.創建一個Job方法,此方法必須繼承QuartzJobBean或者實現Job方法。
public class TestJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(TimeUtils.getCurrentTime());
}
}
2.配置xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.mc.bsframe.job.TestJob"></property>
<property name="durability" value="true"></property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="3000" />
<property name="repeatInterval" value="2000" />
</bean>
<!-- 總管理類 如果將lazy-init='false'那麼容器啓動就會執行調度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 管理trigger -->
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
</beans>
2、MethodInvokeJobDetailFactoryBean
1.創建一個Job類,此類不需要繼承任何類或者實現任何接口
package com.mc.bsframe.job;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerKey;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.springframework.beans.factory.annotation.Autowired;
import com.mc.bsframe.service.TestService;
import com.mc.bsframe.util.TimeUtils;
public class TestJob2 {
public void doSomething() {
System.err.println("****:" + TimeUtils.getCurrentTime());
}
}
2.配置XML
採用SimpleTrigger
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 要執行任務的任務類。 -->
<bean id="testQuartz" class="com.mc.bsframe.job.TestJob2">
</bean>
<!-- 將需要執行的定時任務注入JOB中。 -->
<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testQuartz"></property>
<!-- 任務類中需要執行的方法 -->
<property name="targetMethod" value="doSomething"></property>
<!-- 上一次未執行完成的,要等待有再執行。 -->
<property name="concurrent" value="false"></property>
</bean>
<!-- 基本的定時器,會綁定具體的任務。 -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="testJob"></property>
<property name="startDelay" value="3000"></property>
<property name="repeatInterval" value="2000"></property>
</bean>
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger"></ref>
</list>
</property>
</bean>
</beans>
採用CronTrigger<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 要執行任務的任務類。 -->
<bean id="testQuartz" class="com.mc.bsframe.job.TestJob2">
</bean>
<!-- 將需要執行的定時任務注入JOB中。 -->
<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testQuartz"></property>
<!-- 任務類中需要執行的方法 -->
<property name="targetMethod" value="doSomething"></property>
<!-- 上一次未執行完成的,要等待有再執行。 -->
<property name="concurrent" value="false"></property>
</bean>
<!-- 基本的定時器,會綁定具體的任務。 -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail"><ref bean="testJob"/></property>
<!-- cron表達式 -->
<property name="cronExpression">
<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
</property>
</bean>
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger"></ref>
</list>
</property>
</bean>
</beans>
使用QuartzJobBean,需要繼承。
使用MethodInvokeJobDetailFactoryBean,則需要指定targetObject(任務實例)和targetMethod(實例中要執行的方法)