如何解決SpringBoot定時(shí)任務(wù)報(bào)錯(cuò)Unexpected error occurred in scheduled task問題
問題
spring boot項(xiàng)目在線上一直正常運(yùn)行沒有錯(cuò)誤,然后今天發(fā)生了報(bào)錯(cuò),如圖
這是一個(gè)定時(shí)器錯(cuò)誤,發(fā)生這個(gè)報(bào)錯(cuò)
主要有兩個(gè)原因
- 定時(shí)器編寫的有錯(cuò)誤
- @Scheduled注解方式級(jí)別高于資源注入級(jí)別,導(dǎo)致了資源注入失敗
以下是我的代碼
@RestController @Slf4j @SuppressWarnings({"all"}) @CrossOrigin @RequestMapping("/journal") @Component public class JournalController { @Autowired Journal_timeMapper journal_timeMapper; /** * 每周日將簽到時(shí)間數(shù)據(jù)清空 */ @Scheduled(cron = "0 0 0 * * SUN") public void journaltimeout() { List<Journal_time> journal_times = journal_timeMapper.selectList(null); for (Journal_time journal_time : journal_times) { journal_time.setDay_time("0小時(shí)0分鐘"); journal_time.setWeek_time("0小時(shí)0分鐘"); journal_time.setAll_time("0小時(shí)0分鐘"); journal_time.setWeek_time_desc("第0名"); journal_timeMapper.updateById(journal_time); } } /** * 每天晚上將一天簽到數(shù)據(jù)清空 */ @Scheduled(cron = "0 0 0 * * ?") public void daytimeout() { List<Journal_time> journal_times = journal_timeMapper.selectList(null); for (Journal_time journal_time : journal_times) { journal_time.setDay_time("0小時(shí)0分鐘"); journal_timeMapper.updateById(journal_time); } } }
有一個(gè)特別奇怪的點(diǎn),就是我的daytimeout方法一直在生效,但是journaltimeout卻報(bào)錯(cuò)了,
這都是在一個(gè)Controller下面(我直接暈厥)–目前還沒有找到原因,先說解決方法
解決方法
使用ApplicationContextAware,它實(shí)現(xiàn)了這個(gè)接口的bean,當(dāng)spring容器初始化的時(shí)候,會(huì)自動(dòng)的將ApplicationContext注入進(jìn)來
修改后的代碼
@RestController @Slf4j @SuppressWarnings({"all"}) @CrossOrigin @RequestMapping("/journal") @Component public class JournalController implements ApplicationContextAware { private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static ApplicationContext getApplicationContext() { return context; } public static Object getBean(String name) { return getApplicationContext().getBean(name); } /** * 每周日將簽到時(shí)間數(shù)據(jù)清空 */ @Scheduled(cron = "0 0 0 * * SUN") public void journaltimeout() { Journal_timeMapper journal_timeMapper = (Journal_timeMapper)this.getBean("journal_timeMapper"); List<Journal_time> journal_times = journal_timeMapper.selectList(null); for (Journal_time journal_time : journal_times) { journal_time.setDay_time("0小時(shí)0分鐘"); journal_time.setWeek_time("0小時(shí)0分鐘"); journal_time.setAll_time("0小時(shí)0分鐘"); journal_time.setWeek_time_desc("第0名"); journal_timeMapper.updateById(journal_time); } } /** * 每天晚上將一天簽到數(shù)據(jù)清空 */ @Scheduled(cron = "0 0 0 * * ?") public void daytimeout() { Journal_timeMapper journal_timeMapper = (Journal_timeMapper)this.getBean("journal_timeMapper"); List<Journal_time> journal_times = journal_timeMapper.selectList(null); for (Journal_time journal_time : journal_times) { journal_time.setDay_time("0小時(shí)0分鐘"); journal_timeMapper.updateById(journal_time); } } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot使用@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)的并行執(zhí)行
- springboot定時(shí)任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式
- xxl-job定時(shí)任務(wù)配置應(yīng)用及添加到springboot項(xiàng)目中實(shí)現(xiàn)動(dòng)態(tài)API調(diào)用
- SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的4種方式詳解
- SpringBoot集成xxl-job實(shí)現(xiàn)超牛的定時(shí)任務(wù)的步驟詳解
- SpringBoot實(shí)現(xiàn)設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法詳解
- SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式
- Spring Boot 中啟用定時(shí)任務(wù)的操作方法
相關(guān)文章
SpringBoot中將@Bean方法解析為BeanDefinition詳解
這篇文章主要介紹了SpringBoot中將@Bean方法解析為BeanDefinition詳解,得到的BeanDefinition是ConfigurationClassBeanDefinition類型,會(huì)為BeanDefinition設(shè)置factoryMethodName,這意味著當(dāng)實(shí)例化這個(gè)bean的時(shí)候?qū)⒉捎霉S方法,需要的朋友可以參考下2023-12-12使用@RequestParam設(shè)置默認(rèn)可以傳空值
這篇文章主要介紹了使用@RequestParam設(shè)置默認(rèn)可以傳空值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08MyBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例
下面小編就為大家?guī)硪黄狹yBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04MapStruct對(duì)象映射轉(zhuǎn)換解決Bean屬性拷貝性能問題
無意間看到項(xiàng)目中有小伙伴用到了 MapStruct 來做對(duì)象映射轉(zhuǎn)換當(dāng)時(shí)我就很好奇,這個(gè)是什么框架,能夠解決什么問題,帶著這兩個(gè)疑問就有了下面的文章2022-02-02