一、在 Spring 環境下 Quartz 的使用超級簡單。
二、具體使用
1.添加對應的 spring-quartz 的配置文件。
2.新建要執行定時任務的目標類和目標方法,不需要繼承 Job 接口。如:
/**
* @author solverpeng
* @create 2016-09-26-10:21
*/
public class MyJob2 {
public void targetMethod() {
System.out.println("hello world, quartz, data:" + new Date());
}
}
3.在 spring-quartz.xml 文件中配置
(1)配置執行定時任務的目標類和目標方法。
(2)配置 JobDetail,需要指定目標類和目標方法。
(3)配置 Trigger,並在 Trigger 中指定 jobDetail,如果是 CronTrigger ,需要指定 Cron 表達式。
(4)配置 Scheduler,指定 trigger ,以及一些別的屬性。
<?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 class="com.nucsoft.quartz.job.MyJob2" id="myJob"/>
<!-- 配置 JobDetail -->
<bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" id="jobDetail">
<property name="targetObject" ref="myJob"/>
<property name="targetMethod" value="targetMethod"/>
</bean>
<!-- 配置 CronTrigger -->
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="cronTrigger">
<property name="jobDetail" ref="jobDetail"/>
<property name="cronExpression" value="0/5 * * ? 9 *"/>
</bean>
<!-- 配置 Scheduler -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" id="scheduler">
<property name="triggers">
<array>
<ref bean="cronTrigger"/>
</array>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.threadCount">10</prop>
</props>
</property>
<property name="startupDelay" value="10"/>
</bean>
</beans>
說明:Spring 進一步降低了使用 Quartz 的難度,為創建 Quartz 的 JobDetail,Trigger,Scheduler 提供了便利的 FactoryBean,以便能夠在 Spring 容器中注入。
(1)通過 MethodInvokingJobDetailFactoryBean 來創建 JobDetail。
(2)通過 CronTriggerFactoryBean 來創建 Trigger。
(3)通過 SchedulerFactoryBean 來創建 Scheduler。
注意:
(1)Scheduler 中的屬性 quartzProperties 可以指定 org\quartz\quartz.properties 文件中的 key。
(2)Scheduler 中的屬性 startupDelay 指定容器啟動多久後開始指定定時任務。
(3)第一次啟動定時任務和第二次執行定時任務之間時間間隔與表達式定義不同是因為,第一次是啟動定時器,第二次才是真正的執行定時任務。
4.測試
/**
* @author solverpeng
* @create 2016-09-26-10:31
*/
public class QuartzTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-quartz.xml");
}
}
只需要啟動容器即可。
三、總結
介紹了 Spring 環境下 Quartz 的使用,對比發現,在 Spring 下的使用更為簡單,也學到了 Spring 整合第三方的內容時,大多是通過 FactoryBean 的方式,真正整合的是第三方
本身的容器,如 Shiro 的 SecurtyManager,也如 Quartz 的 Scheduler。大容器整合小容器,小容器是一個獨立的單元,簡潔明了。