Java使用quartz實(shí)現(xiàn)定時(shí)任務(wù)示例詳解
正文
最近新到了一個(gè)項(xiàng)目,用到定時(shí)任務(wù)的地方是真滴多。
就稍微研究了一下,來(lái)做個(gè)demo。
其實(shí)定時(shí)任務(wù)使用很廣泛也很方便,之前做的人事管理項(xiàng)目,就會(huì)定期執(zhí)行定時(shí)任務(wù)計(jì)算工資,對(duì)于一個(gè)saas服務(wù)來(lái)說(shuō),即時(shí)的計(jì)算所有員工的工資有點(diǎn)奢侈,所以在每周末計(jì)算一次就ok了。
國(guó)外有的公司是一周發(fā)一次工資,所以當(dāng)時(shí)的邏輯是一周算一次。在國(guó)內(nèi)就一月一次很ok了。在當(dāng)時(shí)的report服務(wù)中,也是定時(shí)任務(wù)同步數(shù)據(jù)到Birt服務(wù),然后展現(xiàn)數(shù)據(jù)。
現(xiàn)在的項(xiàng)目中使用的就更多了。把一些耗費(fèi)性能的,數(shù)據(jù)即時(shí)性不強(qiáng)的都可以用定時(shí)任務(wù)在服務(wù)器負(fù)載不高的時(shí)候進(jìn)行計(jì)算。比如半夜計(jì)算商城用戶的積分,半夜計(jì)算銀行用戶行為產(chǎn)生的積分。銀行系統(tǒng)半夜計(jì)算罰息復(fù)利等。都是定時(shí)任務(wù)很好的應(yīng)用例子。
下來(lái)我們舉一個(gè)列子來(lái)實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)。
配置文件
sue.spring.quartz.cron=*/5 * * * * ?
pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
定時(shí)任務(wù)和觸發(fā)器
package com.luke.demo.schedule;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Value("${sue.spring.quartz.cron}")
private String testCron;
/**
* 創(chuàng)建定時(shí)任務(wù)
*/
@Bean
public JobDetail quartzTestDetail() {
JobDetail jobDetail = JobBuilder.newJob(QuartzTestJob.class)
//添加認(rèn)證信息
.withIdentity("quartzTestDetail", "QUARTZ_TEST")
.build();
return jobDetail;
}
/**
* 創(chuàng)建觸發(fā)器
*/
@Bean
public Trigger quartzTestJobTrigger() {
//執(zhí)行頻率
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(testCron);
//創(chuàng)建觸發(fā)器
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(quartzTestDetail())
//添加認(rèn)證信息
.withIdentity("quartzTestJobTrigger", "QUARTZ_TEST_JOB_TRIGGER")
//添加執(zhí)行規(guī)則
.withSchedule(cronScheduleBuilder)
.build();
return trigger;
}
}
定時(shí)任務(wù)的業(yè)務(wù)代碼
這里的QuartzTestJob如下,方法executeInternal里就是需要定時(shí)執(zhí)行的任務(wù)。
public class QuartzTestJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("現(xiàn)在是"+ new Date());
}
}
當(dāng)項(xiàng)目啟動(dòng)起來(lái)之后,就會(huì)按照設(shè)定的頻率輸出如下:

當(dāng)然也可以啟動(dòng)定時(shí)任務(wù)查詢?nèi)降姆祷亟Y(jié)果,之前做車抵貸業(yè)務(wù)的風(fēng)控系統(tǒng)的時(shí)候,請(qǐng)求了三方的數(shù)據(jù),主動(dòng)請(qǐng)求然后定時(shí)任務(wù)輪詢結(jié)果。
現(xiàn)在看來(lái),用消息隊(duì)列實(shí)現(xiàn)也是很每秒,延時(shí)消息剛好可以滿足這個(gè)業(yè)務(wù)需求,請(qǐng)求數(shù)據(jù)然后向消息隊(duì)列中放入一個(gè)延時(shí)消息,時(shí)間到了,去請(qǐng)求結(jié)果,若是沒(méi)好,就再往消息隊(duì)列中放入一個(gè)延時(shí)消息。這樣相對(duì)于定時(shí)任務(wù)的好處是,避免了CPU空轉(zhuǎn),提升了性能。
以上就是Java使用quartz實(shí)現(xiàn)定時(shí)任務(wù)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java quartz實(shí)現(xiàn)定時(shí)任務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java?@Scheduled定時(shí)任務(wù)不執(zhí)行解決辦法
- Java實(shí)現(xiàn)定時(shí)任務(wù)的方法總結(jié)
- Java實(shí)現(xiàn)定時(shí)任務(wù)最簡(jiǎn)單的3種方法
- Java項(xiàng)目實(shí)現(xiàn)定時(shí)任務(wù)的三種方法
- java定時(shí)任務(wù)cron表達(dá)式每周執(zhí)行一次的坑及解決
- Java使用線程池執(zhí)行定時(shí)任務(wù)
- Java中定時(shí)任務(wù)的6種實(shí)現(xiàn)方式
- Java spring定時(shí)任務(wù)詳解
- Java 實(shí)現(xiàn)定時(shí)任務(wù)的三種方法
- java使用@Scheduled注解執(zhí)行定時(shí)任務(wù)
- Java定時(shí)任務(wù)取消的示例代碼
相關(guān)文章
Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
解決springboot環(huán)境切換失效的問(wèn)題
這篇文章主要介紹了解決springboot環(huán)境切換失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Spring?Security配置多個(gè)數(shù)據(jù)源并添加登錄驗(yàn)證碼的實(shí)例代碼
這篇文章主要介紹了Spring?Security配置多個(gè)數(shù)據(jù)源并添加登錄驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
Java8中對(duì)于LocalDateTime的序列化和反序列化問(wèn)題
這篇文章主要介紹了Java8中對(duì)于LocalDateTime的序列化和反序列化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲
這篇文章主要為大家詳細(xì)介紹了Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
還在用if(obj!=null)做非空判斷,帶你快速上手Optional
這篇文章主要介紹了還在用if(obj!=null)做非空判斷,帶你快速上手Optional,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Java實(shí)現(xiàn)分頁(yè)的前臺(tái)頁(yè)面和后臺(tái)代碼
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)分頁(yè)的前臺(tái)頁(yè)面和后臺(tái)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
MyBatis圖文并茂講解注解開(kāi)發(fā)一對(duì)一查詢
這篇文章主要介紹了SpringBoot中Mybatis注解一對(duì)一查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

