SpringBoot簡單實(shí)現(xiàn)定時(shí)器過程
前言
公司最近需要完成一個(gè)定時(shí)去DB查詢數(shù)據(jù),把有問題的數(shù)據(jù)給篩選出來通過微信小程序的消息推送功能將有問題的數(shù)據(jù)推送給指定的員工去篩查問題。對于Java后端來說肯定實(shí)現(xiàn)定時(shí)功能肯定是使用到Spring封裝好的定時(shí)調(diào)度Scheduled。
正文
定時(shí)器的實(shí)現(xiàn)
Spring boot啟動類代碼,加入了@EnableScheduling注解來開啟定時(shí)器功能
@SpringBootApplication
@EnableScheduling // 開啟定時(shí)功能
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}調(diào)度任務(wù)代碼,需要通過@Component注解將任務(wù)類注入到IoC容器中
@Component
public class TestSchedulingTask {
// 這個(gè)cron表達(dá)式代表從0秒開始,每過3秒執(zhí)行一次。
@Scheduled(cron = "0/3 * * * * ?")
public void test(){
// 大家可以根據(jù)公司的業(yè)務(wù)來實(shí)現(xiàn),更希望是@Autowrite注入service層的接口,業(yè)務(wù)邏輯寫在service層中。
// 這里測試我就輸出當(dāng)前系統(tǒng)時(shí)間了...
Date date = new Date(System.currentTimeMillis());
String rule = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(rule);
String format = simpleDateFormat.format(date);
System.out.println(format);
}
}這里注意每個(gè)任務(wù)方法都要加上@Scheduled注解,并且規(guī)定好cron表達(dá)式。
完全可以放心,不會cron表達(dá)式?jīng)]關(guān)系,后面會詳細(xì)講解,并且網(wǎng)上也有在線生成cron表達(dá)式的網(wǎng)站,我們來看看控制臺輸出的結(jié)果吧。

cron表達(dá)式詳解
cron表達(dá)式
| 字段 | 范圍 | 允許的字符 |
| 秒(second) | 0-59 | ,/-* |
| 分(minute) | 0-59 | ,/-* |
| 小時(shí)(hour) | 0-23 | ,/-* |
| 日期(day of month) | 1-31(需要考慮月份不一致) | ,/-*?LW |
| 月份(month) | 1-12(對應(yīng)的英文縮寫也行) | ,/-* |
| 星期(day of week) | 1-7 | ,/-*?L |
| 年(year) | 這玩意基本用不到 | 這玩意基本用不到 |
允許的字符的解釋:
,:算是一個(gè)枚舉,多值的存在,比如second中5,20就代表5和20秒的時(shí)候觸發(fā)。
/:值1/值2,值1代表開始時(shí)間,值2代表隔多久一次,比如我案例中就是從0秒開始3秒觸發(fā)一次。
-:范圍值,從多久到多久。
*:全部范圍通用。
?:只存在于日期和星期中,假如你想要每個(gè)月2號觸發(fā),但是你星期用*就會每天都會觸發(fā),就會產(chǎn)生bug,所以需要?來代替*。
L:表示最后的意思,出現(xiàn)在日期和星期中,比如在日期中使用L就代表當(dāng)月最后一天,在星期中使用3L就代表最后一個(gè)星期三觸發(fā)。
W:表示工作日,在日期中使用,假如使用9W,如果9號是星期1-5就直接觸發(fā),如果9號是星期六就8號觸發(fā),如果9號是星期天就星期一觸發(fā)也就是10號觸發(fā)。
其實(shí)懂個(gè)大概就夠了,能做筆記記錄是最好,因?yàn)橛性诰€生成網(wǎng)站,百度隨便就能找到
總結(jié)
因?yàn)楸救隧?xiàng)目暫時(shí)不用考慮異步之類的所以本帖暫時(shí)沒有帶來異步的定時(shí)器,不過后續(xù)會出異步的帖子,關(guān)于定時(shí)任務(wù)的底層源碼也會出篇帖子來細(xì)講。
到此這篇關(guān)于SpringBoot簡單實(shí)現(xiàn)定時(shí)器過程的文章就介紹到這了,更多相關(guān)SpringBoot定時(shí)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Boot在Web應(yīng)用中基于JdbcRealm安全驗(yàn)證過程
這篇文章主要為大家介紹了Spring?Boot在Web應(yīng)用中基于JdbcRealm安全驗(yàn)證過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-02-02
Java結(jié)合redis實(shí)現(xiàn)接口防重復(fù)提交
本文主要介紹了Java結(jié)合redis實(shí)現(xiàn)接口防重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
SpringCloud turbine監(jiān)控實(shí)現(xiàn)過程解析
這篇文章主要介紹了SpringCloud turbine監(jiān)控實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
java IO流 之 輸出流 OutputString()的使用
這篇文章主要介紹了java IO流 之 輸出流 OutputString()的使用的相關(guān)資料,需要的朋友可以參考下2016-12-12
Java concurrency之鎖_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency之鎖的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
SpringSession會話管理之Redis與JDBC存儲實(shí)現(xiàn)方式
本文將詳細(xì)介紹Spring Session的核心概念、特性以及如何使用Redis和JDBC來實(shí)現(xiàn)會話存儲,幫助開發(fā)者構(gòu)建更加健壯和可擴(kuò)展的應(yīng)用系統(tǒng),希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

