Java使用quartz實現(xiàn)定時任務示例詳解
正文
最近新到了一個項目,用到定時任務的地方是真滴多。
就稍微研究了一下,來做個demo。
其實定時任務使用很廣泛也很方便,之前做的人事管理項目,就會定期執(zhí)行定時任務計算工資,對于一個saas服務來說,即時的計算所有員工的工資有點奢侈,所以在每周末計算一次就ok了。
國外有的公司是一周發(fā)一次工資,所以當時的邏輯是一周算一次。在國內(nèi)就一月一次很ok了。在當時的report服務中,也是定時任務同步數(shù)據(jù)到Birt服務,然后展現(xiàn)數(shù)據(jù)。
現(xiàn)在的項目中使用的就更多了。把一些耗費性能的,數(shù)據(jù)即時性不強的都可以用定時任務在服務器負載不高的時候進行計算。比如半夜計算商城用戶的積分,半夜計算銀行用戶行為產(chǎn)生的積分。銀行系統(tǒng)半夜計算罰息復利等。都是定時任務很好的應用例子。
下來我們舉一個列子來實現(xiàn)一個定時任務。
配置文件
sue.spring.quartz.cron=*/5 * * * * ?
pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
定時任務和觸發(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)建定時任務 */ @Bean public JobDetail quartzTestDetail() { JobDetail jobDetail = JobBuilder.newJob(QuartzTestJob.class) //添加認證信息 .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()) //添加認證信息 .withIdentity("quartzTestJobTrigger", "QUARTZ_TEST_JOB_TRIGGER") //添加執(zhí)行規(guī)則 .withSchedule(cronScheduleBuilder) .build(); return trigger; } }
定時任務的業(yè)務代碼
這里的QuartzTestJob如下,方法executeInternal里就是需要定時執(zhí)行的任務。
public class QuartzTestJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("現(xiàn)在是"+ new Date()); } }
當項目啟動起來之后,就會按照設定的頻率輸出如下:
當然也可以啟動定時任務查詢?nèi)降姆祷亟Y(jié)果,之前做車抵貸業(yè)務的風控系統(tǒng)的時候,請求了三方的數(shù)據(jù),主動請求然后定時任務輪詢結(jié)果。
現(xiàn)在看來,用消息隊列實現(xiàn)也是很每秒,延時消息剛好可以滿足這個業(yè)務需求,請求數(shù)據(jù)然后向消息隊列中放入一個延時消息,時間到了,去請求結(jié)果,若是沒好,就再往消息隊列中放入一個延時消息。這樣相對于定時任務的好處是,避免了CPU空轉(zhuǎn),提升了性能。
以上就是Java使用quartz實現(xiàn)定時任務示例詳解的詳細內(nèi)容,更多關(guān)于Java quartz實現(xiàn)定時任務的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java NegativeArraySizeException異常解決方案
這篇文章主要介紹了Java NegativeArraySizeException異常解決方案,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08SpringBoot實現(xiàn)RAS+AES自動接口解密
本文主要介紹了SpringBoot實現(xiàn)RAS+AES自動接口解密,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03SpringBoot+JWT實現(xiàn)注冊、登錄、狀態(tài)續(xù)簽流程分析
這篇文章主要介紹了SpringBoot+JWT實現(xiàn)注冊、登錄、狀態(tài)續(xù)簽【登錄保持】,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06