dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(九)之spring中定時器quartz的整合
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010046908/article/details/54930240
今天來總結一下。Spring中quartz的使用。
1、Quartz是什麼?
Quartz 是一個開源的作業排程框架,它完全由 Java 寫成,並設計用於 J2SE 和 J2EE 應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而建立簡單的或複雜的排程。
2、Quartz的分類
2.1、按照作業類的繼承方式來分,可以分為兩類
- 作業類需要繼承自特定的作業類基類,如Quartz中需要繼承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要繼承自java.util.TimerTask。
- 作業類即普通的java類,不需要繼承自任何基類。
注意:推薦使用第二種方式,因為這樣所以的類都是普通類,不需要事先區別對待。
2.2、按照任務排程的觸發時機來分,這裡主要是針對作業使用的觸發器,主要有以下兩種:
-
每隔指定時間則觸發一次,在Quartz中對應的觸發器為:org.springframework.scheduling.quartz.SimpleTriggerBean
-
每到指定時間則觸發一次,在Quartz中對應的排程器為:org.springframework.scheduling.quartz.CronTriggerBean
注意:並非每種任務都可以使用這兩種觸發器,如java.util.TimerTask任務就只能使用第一種。Quartz和spring task都可以支援這兩種觸發條件。
3、新增Quartz依賴
<!-- 定時器的使用 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
4、Spring中quartz的使用(作業類即普通的java類的使用)
4.1、定義作業類
package com.lidong.dubbo.core.util.quartz;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @專案名稱:lidong-dubbo
* @類名:SpringQtz
* @類的描述: 作業類的排程
* @作者:lidong
* @建立時間:2017/2/8 下午5:41
* @公司:chni
* @QQ:1561281670
* @郵箱:lidong1665@163.com
*/
public class SpringQtz {
static Logger logger = LoggerFactory.getLogger(SpringQtz.class);
private static int counter = 0;
/**
* 排程的方法
*/
public void execute() {
long ms = System.currentTimeMillis();
logger.info(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(ms))+" "+"(" + counter++ + ")");
}
}
4.2、在Spring中配置作業類
<!-- 要呼叫的工作類 -->
<bean id="SpringQtzJob" class="com.lidong.dubbo.core.util.quartz.SpringQtz" />
4.3 、定義呼叫物件和方法
<!-- 定義呼叫物件和呼叫物件的方法 -->
<bean id="SpringQtzJobMethod"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 呼叫的類 -->
<property name="targetObject">
<ref bean="SpringQtzJob" />
</property>
<!-- 要執行的方法名稱 -->
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
4.4、配置排程觸發器
<!-- ======================== 排程觸發器 ======================== -->
<bean id="CronTriggerBean"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--作業詳情 -->
<property name="jobDetail" ref="SpringQtzJobMethod"></property>
<!-- cron表示式 -->
<property name="cronExpression" value="0/10 * * * * ?"></property>
</bean>
4.5、配置排程工廠
<!-- ======================== 排程工廠 ======================== -->
<bean id="SpringJobSchedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="CronTriggerBean" />
<ref bean="CronTriggerBean1" />
</list>
</property>
</bean>
5、quartz的cron 表示式
一個cron表示式至少有6個,是按照空格來分割的時間元素。
按照順序為:
- 秒 0-59
- 分鐘 0-59
- 小時 0-23
- 天 (月)1-31
- 月 0-31
- 天 (星期)1-7
-
年份 1970- 遞增
給幾個例子:
"30 * * * * ?" 每半分鐘觸發任務
"30 10 * * * ?" 每小時的10分30秒觸發任務
"30 10 1 * * ?" 每天1點10分30秒觸發任務
"30 10 1 20 * ?" 每月20號1點10分30秒觸發任務
"30 10 1 20 10 ? *" 每年10月20號1點10分30秒觸發任務
"30 10 1 20 10 ? 2011" 2011年10月20號1點10分30秒觸發任務
"30 10 1 ? 10 * 2011" 2011年10月每天1點10分30秒觸發任務
"30 10 1 ? 10 SUN 2011" 2011年10月每週日1點10分30秒觸發任務
"15,30,45 * * * * ?" 每15秒,30秒,45秒時觸發任務
"15-45 * * * * ?" 15到45秒內,每秒都觸發任務
"15/5 * * * * ?" 每分鐘的每15秒開始觸發,每隔5秒觸發一次
"15-30/5 * * * * ?" 每分鐘的15秒到30秒之間開始觸發,每隔5秒觸發一次
"0 0/3 * * * ?" 每小時的第0分0秒開始,每三分鐘觸發一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10點15分0秒觸發任務
"0 15 10 L * ?" 每個月最後一天的10點15分0秒觸發任務
"0 15 10 LW * ?" 每個月最後一個工作日的10點15分0秒觸發任務
"0 15 10 ? * 5L" 每個月最後一個星期四的10點15分0秒觸發任務
"0 15 10 ? * 5#3" 每個月第三週的星期四的10點15分0秒觸發任務
基本上就這麼多了。
相關文章
- Quartz - Spring整合Quartz實現叢集的定時任務quartzSpring
- Quartz - Spring和Quartz的整合quartzSpring
- SpringBoot整合Quartz定時任務Spring Bootquartz
- spring-quartz整合Springquartz
- MyBatis(九) 整合Spring、整合SpringMVCMyBatisSpringMVC
- 普通web整合quartz跑定時任務Webquartz
- 九、Spring Boot整合Spring Security之授權概述Spring Boot
- springboot整合Quartz實現動態配置定時任務Spring Bootquartz
- Grails整合Quartz外掛實現定時任務(Job)AIquartz
- Spring整合Quartz案例使用RAM儲存方式Springquartz
- Spring整合Quartz案例使用JDBC儲存方式SpringquartzJDBC
- SpringBoot 整合 Quartz + MySQLSpring BootquartzMySql
- 【Springboot】快速整合QuartzSpring Bootquartz
- Spring Boot整合quartz實現定時任務並支援切換任務資料來源Spring Bootquartz
- springboot專案整合quartz動態建立,停止,恢復,刪除定時任務,整合swagger3.0Spring BootquartzSwagger
- 如何實現Spring Boot和Quartz整合? - Nguyen Phuc HaiSpring BootquartzAI
- Spring Boot 配置 Quartz 定時任務Spring Bootquartz
- SpringBoot第九篇:整合Spring Data JPASpring Boot
- Quartz.NET整合UI版quartzUI
- 分散式定時器 Quartz 作業中注入 Spring 依賴項分散式定時器quartzSpring
- Spring Boot中整合機器學習簡介Spring Boot機器學習
- 整合Atomikos、Quartz、Postgresql的踩坑日記quartzSQL
- Spring同時整合JPA與MybatisSpringMyBatis
- WebService之Spring+CXF整合示例WebSpring
- spring原始碼分析之freemarker整合Spring原始碼
- Spring的Junit整合Spring
- Spring系列之整合MongoDB的2種方法SpringMongoDB
- spring+redis的整合,使用spring-data-redis來整合SpringRedis
- 實戰程式碼(一):SpringBoot整合QuartzSpring Bootquartz
- spring:spring與mybatis的整合SpringMyBatis
- Autofac 和 Quartz.Net 自動注入的整合quartz
- (九) SpringBoot起飛之路-整合/整合Swagger 2 And 3Spring BootSwagger
- jackson學習之九:springboot整合(配置檔案)Spring Boot
- Spring整合Mybatis方式一 - 常規整合 - 註冊對映器SpringMyBatis
- spring-boot-route(九)整合JPA運算元據庫Springboot
- Spring Cloud(九)高可用的分散式配置中心 Spring Cloud Config 整合 Eureka 服務SpringCloud分散式
- SpringBoot整合Quartz實現動態修改定時任務間隔Spring Bootquartz
- 小代學Spring Boot之整合MyBatisSpring BootMyBatis
- 【SSH框架】系列之 Spring 整合 Hibernate 框架框架Spring