SpringMVC 項目中 Quartz 定時任務的設置紀要

項目使用的是SpringMVC, 之前就已經集成了 1.x 版本的 Quartz,有專門的配置文件定義了須要的bean。 java

1、配置文件示例以下: spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"
        >
        
	<!-- 定時裝置所要執行的任務所在的類 -->
    <bean id="xxxJob" class="XXX"/>
    
	<!-- 引用任務描述 -->
    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject">
		   
		   <!-- 引用任務方法所在的類 -->
           <ref bean="xxxJob" />
       </property>
       <property name="targetMethod">
           
		   <!-- 指定任務方法名稱 -->
		   <value>xxxMenthod</value>
       </property>
    </bean>
    
    <!-- 配置觸發器 -->
    <bean id="xxxTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
       <!-- 這裏不能夠直接在屬性jobDetail中引用taskJob,由於他要求的是一個jobDetail類型的對象,因此咱們得經過MethodInvokingJobDetailFactoryBean來轉一下 -->
       <property name="jobDetail">
	   
		   <!-- 引用任務描述bean -->
           <ref bean="methodInvokingJobDetail" />
       </property>
	   
       <!-- 天天的8點到21點每隔1分鐘觸發,具體說明見附錄 -->
       <property name="cronExpression">
	   
		   <!-- 秒 分 時 日 月 周 年 -->
           <value>0 0 07,12,15,23 * * ?</value>
       </property>
    </bean>
 
	<!-- 配置任務工廠, 只能有一個這種bean -->
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       
	   <!-- 添加觸發器 -->
       <property name="triggers">
           <list>
              <ref local="xxxTrigger" />
			  <!-- ... -->
           </list>
       </property>
    </bean>
</beans>



注意:schedulerFactory 只能定義一個,否則在工程啓動的時候會報錯。


2、實現程序對定時任務執行的控制 spring-mvc

目前擬實現一個控制定時任務執行的服務類,供控制層調用,包括對運行中的Quartz中觸發器的增、刪和修改。 mvc

在這個服務類中,能夠經過依賴注入註解拿到配置好的 SchedulerFactoryBean 和 觸發器bean,例如: spa

@Autowired
SchedulerFactoryBean schedulerFactory;

@Autowired
CronTriggerBean xxxTrigger;



拿到 SchedulerFactoryBean 的 bean 之後,就能夠藉此得到得到 Scheduler 對象 scheduler :

Scheduler scheduler = schedulerFactory.getScheduler();



經過 scheduler 能夠取消和新增任務計劃的觸發器了:

try {
	scheduler.unscheduleJob("xxxTrigger", Scheduler.DEFAULT_GROUP);
} catch (SchedulerException e) {
	e.printStackTrace();
}



try {
	String newExpression = "5/1 * * * * ?";
	xxxTrigger.setCronExpression(newExpression);
	scheduler.scheduleJob(xxxTrigger);
} catch (SchedulerException e) {
	e.printStackTrace();
} catch (ParseException e) {
	e.printStackTrace();
}
相關文章
相關標籤/搜索