SpringBoot簡單實現(xiàn)定時器過程
前言
公司最近需要完成一個定時去DB查詢數(shù)據(jù),把有問題的數(shù)據(jù)給篩選出來通過微信小程序的消息推送功能將有問題的數(shù)據(jù)推送給指定的員工去篩查問題。對于Java后端來說肯定實現(xiàn)定時功能肯定是使用到Spring封裝好的定時調(diào)度Scheduled。
正文
定時器的實現(xiàn)
Spring boot啟動類代碼,加入了@EnableScheduling注解來開啟定時器功能
@SpringBootApplication @EnableScheduling // 開啟定時功能 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); } }
調(diào)度任務代碼,需要通過@Component注解將任務類注入到IoC容器中
@Component public class TestSchedulingTask { // 這個cron表達式代表從0秒開始,每過3秒執(zhí)行一次。 @Scheduled(cron = "0/3 * * * * ?") public void test(){ // 大家可以根據(jù)公司的業(yè)務來實現(xiàn),更希望是@Autowrite注入service層的接口,業(yè)務邏輯寫在service層中。 // 這里測試我就輸出當前系統(tǒng)時間了... 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); } }
這里注意每個任務方法都要加上@Scheduled注解,并且規(guī)定好cron表達式。
完全可以放心,不會cron表達式?jīng)]關系,后面會詳細講解,并且網(wǎng)上也有在線生成cron表達式的網(wǎng)站,我們來看看控制臺輸出的結(jié)果吧。
cron表達式詳解
cron表達式
字段 | 范圍 | 允許的字符 |
秒(second) | 0-59 | ,/-* |
分(minute) | 0-59 | ,/-* |
小時(hour) | 0-23 | ,/-* |
日期(day of month) | 1-31(需要考慮月份不一致) | ,/-*?LW |
月份(month) | 1-12(對應的英文縮寫也行) | ,/-* |
星期(day of week) | 1-7 | ,/-*?L |
年(year) | 這玩意基本用不到 | 這玩意基本用不到 |
允許的字符的解釋:
,:算是一個枚舉,多值的存在,比如second中5,20就代表5和20秒的時候觸發(fā)。
/:值1/值2,值1代表開始時間,值2代表隔多久一次,比如我案例中就是從0秒開始3秒觸發(fā)一次。
-:范圍值,從多久到多久。
*:全部范圍通用。
?:只存在于日期和星期中,假如你想要每個月2號觸發(fā),但是你星期用*就會每天都會觸發(fā),就會產(chǎn)生bug,所以需要?來代替*。
L:表示最后的意思,出現(xiàn)在日期和星期中,比如在日期中使用L就代表當月最后一天,在星期中使用3L就代表最后一個星期三觸發(fā)。
W:表示工作日,在日期中使用,假如使用9W,如果9號是星期1-5就直接觸發(fā),如果9號是星期六就8號觸發(fā),如果9號是星期天就星期一觸發(fā)也就是10號觸發(fā)。
其實懂個大概就夠了,能做筆記記錄是最好,因為有在線生成網(wǎng)站,百度隨便就能找到
總結(jié)
因為本人項目暫時不用考慮異步之類的所以本帖暫時沒有帶來異步的定時器,不過后續(xù)會出異步的帖子,關于定時任務的底層源碼也會出篇帖子來細講。
到此這篇關于SpringBoot簡單實現(xiàn)定時器過程的文章就介紹到這了,更多相關SpringBoot定時器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何使用Idea中的 Deployment 實現(xiàn)打包自動部署
這篇文章主要介紹了使用Idea中的 Deployment 實現(xiàn)打包自動部署,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08Spring Boot使用Druid和監(jiān)控配置方法
Druid是Java語言中最好的數(shù)據(jù)庫連接池,并且能夠提供強大的監(jiān)控和擴展功能。下面來說明如何在 Spring Boot 中配置使用Druid2017-04-04Java數(shù)據(jù)結(jié)構(gòu)之圖的兩種搜索算法詳解
在很多情況下,我們需要遍歷圖,得到圖的一些性質(zhì)。有關圖的搜索,最經(jīng)典的算法有深度優(yōu)先搜索和廣度優(yōu)先搜索,接下來我們分別講解這兩種搜索算法,需要的可以參考一下2022-11-11spring-cloud-stream結(jié)合kafka使用詳解
這篇文章主要介紹了spring-cloud-stream結(jié)合kafka使用詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Spring?Security?OAuth?Client配置加載源碼解析
這篇文章主要為大家介紹了Spring?Security?OAuth?Client配置加載源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07