Spring中Quartz排程器的使用
轉載文章, 閱讀原文
一、Quartz的特點
* 按作業類的繼承方式來分,主要有以下兩種:
1.作業類繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式
2.作業類不繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式
注:個人比較推崇第二種,因為這種方式下的作業類仍然是POJO。
* 按任務排程的觸發時機來分,主要有以下兩種:
1.每隔指定時間則觸發一次,對應的排程器為org.springframework.scheduling.quartz.SimpleTriggerBean
2.每到指定時間則觸發一次,對應的排程器為org.springframework.scheduling.quartz.CronTriggerBean
注:這兩種觸發方式均可以跟兩種作業繼承方式相互組合來使用。
下面簡單演示一下在spring對Quartz的用法。
二、作業類繼承org.springframework.scheduling.quartz.QuartzJobBean類,每到指定時間則觸發一次
1.編寫作業類
- package bean.jobDetailBean;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- import org.springframework.scheduling.quartz.QuartzJobBean;
- public class Job1 extends QuartzJobBean {
- private int timeout;
- private static int i = 0;
- //排程工廠例項化後,經過timeout時間開始執行排程
- public void setTimeout(int timeout) {
- this.timeout = timeout;
- }
- /**
- * 要排程的具體任務
- */
- @Override
- protected void executeInternal(JobExecutionContext context)
- throws JobExecutionException {
- System.out.println("繼承QuartzJobBean的方式-排程" + ++i + "進行中...");
- }
- }
2.配置作業類
- <!-- 作業使用繼承QuartzJobBean的方式 -->
- <bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass" value="bean.jobDetailBean.Job1" />
- <property name="jobDataAsMap">
- <map>
- <entry key="timeout" value="0" />
- </map>
- </property>
- </bean>
3.配置作業排程的觸發方式
- <!-- 對應於作業繼QuartzJobBean類的方式 -->
- <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="job1" />
- <!--
- "cronExpression"的配置說明
- 欄位 允許值 允許的特殊字元
- 秒 0-59 , - * /
- 分 0-59 , - * /
- 小時 0-23 , - * /
- 日期 1-31 , - * ? / L W C
- 月份 1-12 或者 JAN-DEC , - * /
- 星期 1-7 或者 SUN-SAT , - * ? / L C #
- 年(可選) 留空, 1970-2099 , - * /
- - 區間
- * 萬用字元
- ? 你不想設定那個欄位
- -->
- <!-- 每分鐘的第0,10,20,30,40,50秒排程一次 -->
- <property name="cronExpression" value="0,10,20,30,40,50 * * * * ?" />
- </bean>
4.配置排程工廠
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="cronTrigger" />
- </list>
- </property>
- </bean>
5.開啟排程
- package test;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class ScheduleTest {
- public static void main(String[] args){
- <span style="white-space:pre"> </span>BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
- }
- }
三、作業類不繼承org.springframework.scheduling.quartz.QuartzJobBean類,每隔指定時間則觸發一次
1.編寫作業類
- package bean.jobDetailBean;
- public class Job2 {
- private static int i = 0;
- public void doJob2() {
- System.out.println("不繼承QuartzJobBean方式-排程" + ++i + "進行中...");
- }
- }
- <bean id="job2"
- class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject">
- <bean class="bean.jobDetailBean.Job2" />
- </property>
- <property name="targetMethod" value="doJob2" />
- <property name="concurrent" value="false" /><!-- 作業不併發排程 -->
- </bean>
3.配置作業排程的觸發方式
- <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
- <property name="jobDetail" ref="job2" />
- <property name="startDelay" value="0" /><!-- 排程工廠例項化後,經過0秒開始執行排程 -->
- <property name="repeatInterval" value="2000" /><!-- 每2秒排程一次 -->
- </bean>
4.配置排程工廠
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="simpleTrigger" />
- </list>
- </property>
- </bean>
5.開啟排程
- package test;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class ScheduleTest {
- public static void main(String[] args){
- BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
- }
- }
相關文章
- 排程器Quartz的簡述與使用總結quartz
- 深入解讀Quartz任務排程器quartz
- Spring使用Quartz定時排程Job無法Autowired注入Service的解決方案Springquartz
- Spring Boot Quartz 分散式叢集任務排程實現Spring Bootquartz分散式
- Quartz任務排程快速入門quartz
- 使用Hazelcast排程Spring tasksASTSpring
- Quartz排程系統入門和排程高可用實現方案quartz
- Quartz.net開源作業排程框架使用詳解quartz框架
- 任務排程框架Quartz快速入門!框架quartz
- MySQL中的事件排程器EVENTMySql事件
- 實現Quartz.NET的HTTP作業排程quartzHTTP
- 任務排程 Quartz 儘量做到可配置?quartz
- Flink排程之排程器、排程策略、排程模式模式
- 定時排程系列之Quartz.Net詳解quartz
- Net作業排程(一) -Quartz.Net入門quartz
- Net作業排程(三) — Quartz.Net進階quartz
- Quartz - Spring和Quartz的整合quartzSpring
- 在Spring中使用JDK定時器實現排程任務SpringJDK定時器
- Spring4+Springmvc+quartz實現多執行緒動態定時排程SpringMVCquartz執行緒
- Spring Quartz定時器&n…Springquartz定時器
- 排程器簡介,以及Linux的排程策略Linux
- Pod的排程是由排程器(kube-scheduler)
- 一文快速入門任務排程框架-Quartz框架quartz
- NET作業排程(定時任務)-Quartz.Netquartz
- Go排程器系列(2)巨集觀看排程器Go
- Quartz在Spring中叢集quartzSpring
- 配置hadoop 使用fair scheduler排程器HadoopAI
- [譯] React 中的排程React
- 山寨版Quartz.Net任務統一排程框架quartz框架
- Spring Boot應用中進行任務排程Spring Boot
- Spring 指南(排程任務)Spring
- Go語言排程器之主動排程(20)Go
- Go排程器系列(3)圖解排程原理Go圖解
- 使用Spring Boot排程WebSocket推送的教程和原始碼 - BaeldungSpring BootWeb原始碼
- RxJava排程器的選擇RxJava
- Go Runtime 的排程器Go
- goroutine 排程器(scheduler)Go
- MYSQL事件排程器MySql事件