springboot定時任務(wù)不起作用問題及解決
springboot定時任務(wù)不起作用
今天再寫一個定時任務(wù)時,發(fā)現(xiàn)所有配置都沒問題,但定時任務(wù)就是不執(zhí)行,通過各種對比測試排除法,終于找到問題所在。
下面看一下啟動類
@SpringBootApplication @ComponentScan(value = "com.timer.timer_demo",lazyInit = true) @EnableScheduling public class TimerDemoApplication { public static void main(String[] args) { SpringApplication.run(TimerDemoApplication.class, args); } }
啟動類上有三個注解
其中有個注解是有個lazyInit屬性,是何意思呢?
ApplicationContext實現(xiàn)的默認行為就是在啟動服務(wù)器時將所有singleton bean提前進行實例化(也就是依賴注入)。
提前實例化意味著作為初始化過程的一部分,applicationContext實例會創(chuàng)建并配置所有的singleton bean。
通常情況下這是一件好事,因為這樣在配置中的任何錯誤就會被立刻實現(xiàn)。
延時加載,設(shè)置為lazy = true 的bean將不會在ApplicationContext啟動時提前被實例化,而是第一次向容器通過getBean索取bean時實例化的。
這段解釋也就是說:
這個屬性為true時,bean類將延遲加載,那樣的話定時任務(wù)類沒在啟動時加載進去,自然就沒法執(zhí)行定時任務(wù),此時怎么解決?
總不能把之前啟動類的這個屬性去掉吧,在啟動類上添加這個得前輩大神肯定有自己考慮,不動為妙,那就指定某些類不使用延遲加載。
代碼如下:
@Component @Lazy(false) public class MyTimerTest { //表示每隔1秒 @Scheduled(fixedRate=1000) public void clearData(){ System.out.println("定時任務(wù)"+System.currentTimeMillis()); } }
想讓哪個類不延遲加載就添加@Lazy(false) 注解即可
好了,springboot的延遲加載坑就解決了
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java的url方式、本地方式獲取json文件內(nèi)容
這篇文章給大家分享了java的url方式、本地方式獲取json文件內(nèi)容的實例代碼,有需要的朋友參考學習下。2018-07-07springboot啟動報錯:application?startup?failed問題
這篇文章主要介紹了springboot啟動報錯:application?startup?failed問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07SpringBoot Security安裝配置及Thymeleaf整合
這篇文章主要介紹了SpringBoot Security安裝配置及Thymeleaf整合,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12java實現(xiàn)后臺數(shù)據(jù)顯示在前端
這篇文章主要為大家詳細介紹了java實現(xiàn)后臺數(shù)據(jù)顯示在前端,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02