@RefreshScope在Quartz 觸發(fā)器類(lèi)導(dǎo)致異常問(wèn)題解決分析
背景
承接上篇,測(cè)試過(guò)程中又遇到了 Nacos Config 的動(dòng)態(tài)刷新注解 @RefreshScope
與 Quartz 框架結(jié)合的問(wèn)題,Bug 排查路上,順手記錄一下吧。
問(wèn)題
有個(gè)模塊使用了Quartz ,通過(guò)配置控制任務(wù)調(diào)度的周期和分組名稱(chēng)。
因?yàn)橐昧藙?dòng)態(tài)配置,所以對(duì)每個(gè)注入類(lè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; }
啟動(dòng)應(yīng)用報(bào)錯(cuò):
自動(dòng)注入 Quartz 的 Scheduler 對(duì)象異常了,因?yàn)橛辛松洗?RestTemplate 失效的經(jīng)驗(yàn),所以一猜就是這個(gè)注解的問(wèn)題,去掉后果然正常了。
話(huà)說(shuō)回來(lái),到底 Quartz 注入的類(lèi)到底能不能動(dòng)態(tài)根據(jù)配置變動(dòng)呢?如果真的要支持定時(shí)任務(wù)周期和分組名稱(chēng)動(dòng)態(tài)變動(dòng),應(yīng)該怎么改造呢?
啟示錄
今天看到兩個(gè)關(guān)于編程的觀點(diǎn)。
言論一:《現(xiàn)代編程工作的實(shí)質(zhì)》
我真正擔(dān)心的是,今天的很多編程沒(méi)有任何樂(lè)趣,它只是集合別人的軟件,把組件拼起來(lái)并啟動(dòng),不需要太多的創(chuàng)造力。 我擔(dān)心編程會(huì)變得太無(wú)聊,因?yàn)槟銢](méi)有機(jī)會(huì)做任何新鮮事。你的興奮來(lái)自于看到機(jī)器產(chǎn)生出來(lái)的有趣結(jié)果,而不是來(lái)自創(chuàng)造新事物的過(guò)程。現(xiàn)在的樂(lè)趣變成,當(dāng)你完成無(wú)聊的工作后,會(huì)突然得到一個(gè)很棒的結(jié)果,但在以前,工作本身并不乏味。
另一句來(lái)自 Redis 的作者:
大多數(shù)編程不再是藝術(shù),也不再是高級(jí)工程。大多數(shù)程序都是微不足道的:編碼人員只需要理解某些特定的接口,然后編寫(xiě)一些邏輯和膠水代碼。 -- Antirez,Redis 的作者
工具人的悲哀!我還以為只有我有類(lèi)似的感覺(jué)呢,SpringBoot 這么強(qiáng)大,開(kāi)源工具這么豐富,任意一個(gè)第三方 jar 的引入,背后都是一個(gè)大黑盒,不經(jīng)過(guò)透徹的測(cè)試,根本不知道有什么問(wèn)題。
以上就是@RefreshScope在Quartz 觸發(fā)器類(lèi)導(dǎo)致異常問(wèn)題解決分析的詳細(xì)內(nèi)容,更多關(guān)于@RefreshScope Quartz異常的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中重寫(xiě)和重載的區(qū)別及說(shuō)明
Java語(yǔ)言中的重載和重寫(xiě)是實(shí)現(xiàn)多態(tài)的兩種方式,但他們的實(shí)現(xiàn)方式和規(guī)則有所不同,重載發(fā)生在一個(gè)類(lèi)中,同名的方法如果有不同的參數(shù)列表,則視為重載,重寫(xiě)則發(fā)生在子類(lèi)和父類(lèi)之間,要求子類(lèi)重寫(xiě)方法和父類(lèi)被重寫(xiě)方法有相同的返回類(lèi)型2024-10-10springboot整合mybatis-plus逆向工程的實(shí)現(xiàn)
這篇文章主要介紹了springboot整合mybatis-plus逆向工程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑
這篇文章主要為大家詳細(xì)介紹了java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Java中float類(lèi)型的范圍及其與十六進(jìn)制的轉(zhuǎn)換例子
這篇文章主要介紹了Java中float類(lèi)型的范圍及其與十六進(jìn)制的轉(zhuǎn)換例子,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10Java并發(fā)中的ABA問(wèn)題學(xué)習(xí)與解決方案
這篇文章主要介紹了Java并發(fā)中的ABA問(wèn)題學(xué)習(xí)與解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05PowerJob的IdGenerateService工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob的IdGenerateService工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01