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