SpringBoot中的定時(shí)任務(wù)和異步調(diào)用詳解
springboot定時(shí)任務(wù)
在創(chuàng)建好的springboot項(xiàng)目的啟動(dòng)類上加@EnableScheduling注解。
@EnableScheduling @SpringBootApplication @MapperScan("com.qianlong.dao") @ComponentScan(value = "com.qianlong") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
然后創(chuàng)建一個(gè)定時(shí)任務(wù)類,加上@Scheduled注解。
@Component public class TestController { @Scheduled(cron = "0/1 * * * * ?") 或者是這樣的@Scheduled(fixedDelay = 2000) 或者是這樣 @Scheduled (fixedRate = 2000) public void test(){ System.out.println("執(zhí)行定時(shí)任務(wù)的時(shí)間是:"+new Date()); } }
然后控制臺(tái)會(huì)每隔一秒打印一次。
Cron表達(dá)式
0/30 * * * * * 每30秒執(zhí)行一次 0 0/5 * * * * 每5分鐘執(zhí)行一次 0 0 0 * * * 每天凌晨執(zhí)行 0 0 8,12,17 * * * 每天8點(diǎn),12點(diǎn),17點(diǎn)整執(zhí)行 0 30 3-5 * * * 每天3到5點(diǎn),30分時(shí)執(zhí)行
關(guān)于@scheduled 的參數(shù)有多種方式,可以根據(jù)自己的需求來進(jìn)行選擇。
- @Scheduled(fixedRate=1000):上一次開始執(zhí)行時(shí)間點(diǎn)后1秒再次執(zhí)行;
- @Scheduled(fixedDelay=1000):上一次執(zhí)行完畢時(shí)間點(diǎn)后1秒再次執(zhí)行;
- @Scheduled(initialDelay=1000, fixedDelay=1000):第一次延遲1秒執(zhí)行,然后在上一次執(zhí)行完畢時(shí)間點(diǎn)后1秒再次執(zhí)行;
- @Scheduled(cron=”* * * * ?”):根據(jù)書寫的cron規(guī)則執(zhí)行。
關(guān)于cron 表達(dá)式
cron一共有7位,但是最后一位是年,可以留空,所以我們可以寫6位:
- 第一位,表示秒,取值0-59
- 第二位,表示分,取值0-59
- 第三位,表示小時(shí),取值0-23
- 第四位,日期天/日,取值1-31
- 第五位,日期月份,取值1-12
- 第六位,星期,取值1-7,星期一,星期二…,注:不是第1周,第二周的意思
- 另外:1表示星期天,2表示星期一。
- 第7為,年份,可以留空,取值1970-2099
- (*)星號(hào):可以理解為每的意思,每秒,每分,每天,每月,每年…
- (?)問號(hào):問號(hào)只能出現(xiàn)在日期和星期這兩個(gè)位置,表示這個(gè)位置的值不確定,每天3點(diǎn)執(zhí)行,所以第六位星期的位置,
- 我們是不需要關(guān)注的,就是不確定的值。同時(shí):日期和星期是兩個(gè)相互排斥的元素,通過問號(hào)來表明不指定值。
- 比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后沖突矛盾了。
- (-)減號(hào):表達(dá)一個(gè)范圍,如在小時(shí)字段中使用“10-12”,則表示從10到12點(diǎn),即10,11,12
- (,)逗號(hào):表達(dá)一個(gè)列表值,如在星期字段中使用“1,2,4”,則表示星期一,星期二,星期四
- (/)斜杠:如:x/y,x是開始值,y是步長,比如在第一位(秒) 0/15就是,從0秒開始,每15秒,最后就是0,15,30,45,60 另:* /y,等同于0/y
- 0 0 3 * * ? 每天3點(diǎn)執(zhí)行
- 0 5 3 * * ? 每天3點(diǎn)5分執(zhí)行
- 0 5 3 ? * * 每天3點(diǎn)5分執(zhí)行,與上面作用相同
- 0 5/10 3 * * ? 每天3點(diǎn)的 5分,15分,25分,35分,45分,55分這幾個(gè)時(shí)間點(diǎn)執(zhí)行
springBoot異步調(diào)用
在創(chuàng)建好的springboot項(xiàng)目的啟動(dòng)類上加@EnableAsync注解。
@EnableAsync //開啟異步調(diào)用 @EnableScheduling @SpringBootApplication @MapperScan("com.qianlong.dao") @ComponentScan(value = "com.qianlong") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
注意在這里一定要加上@EnableAsync注解開啟異步調(diào)用 新建一個(gè)controller
@RestController @RequestMapping("/demo") public class SelectController { @Autowired private SelectService selectService; @RequestMapping("/async") public void as(){ System.out.println("1111111111"); selectService.add(); System.out.println("2222222222"); } }
再建一個(gè)service
@Service public class SelectService { @Async public void add() { System.out.println("333333333"); System.out.println("444444444"); } }
先注釋掉@EnableAsync和@Async兩個(gè)注解,在瀏覽器輸入localhost:8080/demo/async,看下同步調(diào)用執(zhí)行的效果。
執(zhí)行結(jié)果如下
11111111
33333333
44444444
22222222
再把兩個(gè)注解放開,在瀏覽器輸入localhost:8080/demo/async,看下異步調(diào)用執(zhí)行的效果。
11111111
22222222
33333333
44444444
到此這篇關(guān)于SpringBoot中的定時(shí)任務(wù)和異步調(diào)用詳解的文章就介紹到這了,更多相關(guān)SpringBoot定時(shí)任務(wù)和異步調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot實(shí)現(xiàn)XSS漏洞過濾的示例代碼
這篇文章主要介紹了Springboot實(shí)現(xiàn)XSS漏洞過濾的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Spring cloud Gateway簡介及相關(guān)配置方法
這篇文章主要介紹了Spring cloud Gateway簡介及相關(guān)配置方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04MyBatis中select語句中使用String[]數(shù)組作為參數(shù)的操作方法
在 MyBatis 中,如何在 mapper.xml 配置文件中 select 語句中使用 String[] 數(shù)組作為參數(shù)呢,并且使用IN關(guān)鍵字來匹配數(shù)據(jù)庫中的記錄,這篇文章主要介紹了MyBatis中select語句中使用String[]數(shù)組作為參數(shù),需要的朋友可以參考下2023-12-12利用logback 設(shè)置不同包下的日志級(jí)別
這篇文章主要介紹了利用logback 設(shè)置不同包下的日志級(jí)別,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Spring Boot修改內(nèi)置Tomcat默認(rèn)端口號(hào)的示例
本篇文章主要介紹了Spring Boot修改內(nèi)置Tomcat端口號(hào)的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Spring項(xiàng)目如何實(shí)現(xiàn)帶請求鏈路id的日志記錄
我們在做項(xiàng)目的時(shí)候通常需要通過請求日志來排查定位線上問題,如果日志比較多而我們又需要查找整個(gè)請求的全部日志的時(shí)候會(huì)比較困難,下面我們就來看看如何用java aop實(shí)現(xiàn)請求id的日志記錄吧2024-12-12