日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring整合定时任务组件Quartz的简单使用

發布時間:2024/4/15 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring整合定时任务组件Quartz的简单使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Quartz介紹

Quartz是Job scheduling(作業調度)領域的一個開源項目,Quartz既可以單獨使用也可以跟spring框
架整合使用,在實際開發中一般會使用后者。使用Quartz可以開發一個或者多個定時任務,每個定時任
務可以單獨指定執行的時間,例如每隔1小時執行一次、每個月第一天上午10點執行一次、每個月最后
一天下午5點執行一次等。
官網:http://www.quartz-scheduler.org/

簡單使用(使用步奏與解釋在代碼注釋中)

搭建maven工程

pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.fs</groupId><artifactId>QuartzDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies> <!-- spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.9.RELEASE</version></dependency> <!-- quartz 定時器--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.2.1</version></dependency></dependencies> </project>

applicationContext-jobs.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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 把自定義的定時任務類(這個類是個普通類,里面需要自己編寫定時執行的方法)springIOC管理--><bean id="quartzHelloWorld" class="com.fs.regularwork.QuartzHelloWorld"></bean> <!-- 設置第二個定時類--><bean id="quartzHelloWorld02" class="com.fs.regularwork.QuartzHelloWorld02"></bean><!-- 將方法調用作業詳細信息工廠Bean交給ioc管理--><bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 注入自定義的定時任務類的對象--><property name="targetObject" ref="quartzHelloWorld"/> <!-- 注入自定義調用對象的具體執行的方法--><property name="targetMethod" value="quartzTest"/></bean><!-- 將方法調用作業詳細信息工廠Bean交給ioc管理--><bean id="jobDetail02" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 注入自定義的定時任務類的對象--><property name="targetObject" ref="quartzHelloWorld02"/><!-- 注入自定義調用對象的具體執行的方法--><property name="targetMethod" value="quartzTest02"/></bean><!-- 注冊一個觸發器,指定任務觸發時間,觸發上面指定的方法--><bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!-- 注入jobDetail,通過反射來調用我們上面自定義的方法--><property name="jobDetail" ref="jobDetail"/> <!-- 指定觸發事件,基于Cron表達式--><property name="cronExpression"> <!-- 從0秒開始,每10秒執行一次,測試功能使用--><value>0/10 * * * * ? </value> <!-- 從每天的3點開始執行一次--> <!-- <value>0 0 3 * * ? </value>--> <!-- 從0小時開始,30分鐘執行一次 --> <!-- <value>0 0/30 * * * ?</value>--></property></bean><!-- 注冊一個觸發器,指定任務觸發時間,觸發上面指定的方法--><bean id="myTrigger02" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!-- 注入jobDetail,通過反射來調用我們上面自定義的方法--><property name="jobDetail" ref="jobDetail02"/><property name="cronExpression"><value>0/10 * * * * ? </value></property></bean><!-- 統一注冊一個調度工廠,通過這個調用工廠調度觸發器任務 --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 可以注入多個觸發器--><property name="triggers"><list> <!-- 注入上面觸發器,可以注入多個,我由于上面配置了2個,所以我注入2個測試能否10秒執行方法--><ref bean="myTrigger"/><ref bean="myTrigger02"/></list></property></bean> </beans>
java config方式(偽代碼)
package com.fs.config;import com.fs.controller.JorumServerRegister; import org.quartz.JobDetail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean;@Configuration public class QuartzConfig {//注入統一任務類@Autowiredprivate 任務類 jorumServerRegister;@Bean("heartbeat")public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(){MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();//注入自定義的定時任務類的對象methodInvokingJobDetailFactoryBean.setTargetObject(jorumServerRegister);//注入自定義調用對象的具體執行的方法methodInvokingJobDetailFactoryBean.setTargetMethod("heartbeat");return methodInvokingJobDetailFactoryBean;}//觸發器@Beanpublic CronTriggerFactoryBean cronTriggerFactoryBean(@Autowired @Qualifier("heartbeat") MethodInvokingJobDetailFactoryBean heartbeat){CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();// 注入jobDetail,通過反射來調用我們上面自定義的方法JobDetail object = heartbeat.getObject();cronTriggerFactoryBean.setJobDetail(object);//10秒執行一次心跳方法cronTriggerFactoryBean.setCronExpression("0/10 * * * * ? ");return cronTriggerFactoryBean;}//注冊一個統一調度工廠@Beanpublic SchedulerFactoryBean schedulerFactoryBean(@Autowired CronTriggerFactoryBean cronTriggerFactoryBean){SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();//注入上面觸發器schedulerFactoryBean.setTriggers(cronTriggerFactoryBean.getObject());return schedulerFactoryBean;} }
cron表達式

上面的入門案例中我們指定了一個表達式:0/10 * * * * ?
這種表達式稱為cron表達式,通過cron表達式可以靈活的定義出符合要求的程序執行的時間。本小節我
們就來學習一下cron表達式的使用方法。如下圖:

cron表達式分為七個域,之間使用空格分隔。其中最后一個域(年)可以為空。每個域都有自己允許的
值和一些特殊字符構成。使用這些特殊字符可以使我們定義的表達式更加靈活。
下面是對這些特殊字符的介紹:
逗號(,):指定一個值列表,例如使用在月域上1,4,5,7表示1月、4月、5月和7月
橫杠(-):指定一個范圍,例如在時域上3-6表示3點到6點(即3點、4點、5點、6點)
星號(*):表示這個域上包含所有合法的值。例如,在月份域上使用星號意味著每個月都會觸發
斜線(/):表示遞增,例如使用在秒域上0/15表示每15秒
問號(?):只能用在日和周域上,但是不能在這兩個域上同時使用。表示不指定
井號(#):只能使用在周域上,用于指定月份中的第幾周的哪一天,例如6#3,意思是某月的第三個
周五 (6=星期五,3意味著月份中的第三周)
L:某域上允許的最后一個值。只能使用在日和周域上。當用在日域上,表示的是在月域上指定的月份
的最后一天。用于周域上時,表示周的最后一天,就是星期六
W:W 字符代表著工作日 (星期一到星期五),只能用在日域上,它用來指定離指定日的最近的一個工作

cron表達式在線生成網站

前面介紹了cron表達式,但是自己編寫表達式還是有一些困難的,我們可以借助一些cron表達式在線生
成器來根據我們的需求生成表達式即可。
cron表達式在線生成

QuartzHelloWorld

package com.fs.regularwork;import java.text.SimpleDateFormat; import java.util.Date; /* 自定義的普通類,讓Quartz 通過反射來定時執行這個方法*/ public class QuartzHelloWorld {//編寫定時執行的方法,注意要是public的public void quartzTest(){System.out.println("02:HelloWorld_Quartz"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()));} }

QuartzHelloWorld02

package com.fs.regularwork;import java.text.SimpleDateFormat; import java.util.Date;/* 自定義的普通類,讓Quartz 通過反射來定時執行這個方法*/ public class QuartzHelloWorld02 {//編寫定時執行的方法,注意要是public的public void quartzTest02(){System.out.println("01:HelloWorld_Quartz"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()));} }

TestQuartz測試類

package com.fs.regularwork;import org.springframework.context.support.ClassPathXmlApplicationContext; /* 測試Quartz*/ public class TestQuartz {public static void main(String[] args) {//只有創建了spring的容器,定時器就會去反射通過我們xml配置的cron表達式指定的時間去調用我們配置的方法new ClassPathXmlApplicationContext("classpath:applicationContext-jobs.xml");} }

運行結果

總結

以上是生活随笔為你收集整理的Spring整合定时任务组件Quartz的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。