@RefreshScope在Quartz 觸發(fā)器類導致異常問題解決分析
背景
承接上篇,測試過程中又遇到了 Nacos Config 的動態(tài)刷新注解 @RefreshScope
與 Quartz 框架結合的問題,Bug 排查路上,順手記錄一下吧。
問題
有個模塊使用了Quartz ,通過配置控制任務調(diào)度的周期和分組名稱。
因為引用了動態(tài)配置,所以對每個注入類都加上了 @RefreshScope
,代碼如下:
@Value("${quartz.task.cron}") private String taskCron; @Bean public JobDetail taskJobDetail(){ JobDetail jobDetail = JobBuilder.newJob(XXTaskJob.class) .withIdentity("taskName","taskGroup") .storeDurably() .build(); return jobDetail; } @Bean @RefreshScope public Trigger taskTrigger() { Trigger trigger = TriggerBuilder.newTrigger() .forJob(taskJobDetail()) .withIdentity("taskName","taskGroup") .startNow() .withSchedule(CronScheduleBuilder.cronSchedule(taskCron)) .build(); return trigger; }
啟動應用報錯:
自動注入 Quartz 的 Scheduler 對象異常了,因為有了上次 RestTemplate 失效的經(jīng)驗,所以一猜就是這個注解的問題,去掉后果然正常了。
話說回來,到底 Quartz 注入的類到底能不能動態(tài)根據(jù)配置變動呢?如果真的要支持定時任務周期和分組名稱動態(tài)變動,應該怎么改造呢?
啟示錄
今天看到兩個關于編程的觀點。
我真正擔心的是,今天的很多編程沒有任何樂趣,它只是集合別人的軟件,把組件拼起來并啟動,不需要太多的創(chuàng)造力。 我擔心編程會變得太無聊,因為你沒有機會做任何新鮮事。你的興奮來自于看到機器產(chǎn)生出來的有趣結果,而不是來自創(chuàng)造新事物的過程。現(xiàn)在的樂趣變成,當你完成無聊的工作后,會突然得到一個很棒的結果,但在以前,工作本身并不乏味。
另一句來自 Redis 的作者:
大多數(shù)編程不再是藝術,也不再是高級工程。大多數(shù)程序都是微不足道的:編碼人員只需要理解某些特定的接口,然后編寫一些邏輯和膠水代碼。 -- Antirez,Redis 的作者
工具人的悲哀!我還以為只有我有類似的感覺呢,SpringBoot 這么強大,開源工具這么豐富,任意一個第三方 jar 的引入,背后都是一個大黑盒,不經(jīng)過透徹的測試,根本不知道有什么問題。
以上就是@RefreshScope在Quartz 觸發(fā)器類導致異常問題解決分析的詳細內(nèi)容,更多關于@RefreshScope Quartz異常的資料請關注腳本之家其它相關文章!
相關文章
springboot整合mybatis-plus逆向工程的實現(xiàn)
這篇文章主要介紹了springboot整合mybatis-plus逆向工程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08java使用Dijkstra算法實現(xiàn)單源最短路徑
這篇文章主要為大家詳細介紹了java使用Dijkstra算法實現(xiàn)單源最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01Java中float類型的范圍及其與十六進制的轉(zhuǎn)換例子
這篇文章主要介紹了Java中float類型的范圍及其與十六進制的轉(zhuǎn)換例子,是Java入門學習中的基礎知識,需要的朋友可以參考下2015-10-10PowerJob的IdGenerateService工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob的IdGenerateService工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01