如何解決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-08
MyBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例
下面小編就為大家?guī)硪黄狹yBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
MapStruct對(duì)象映射轉(zhuǎn)換解決Bean屬性拷貝性能問題
無(wú)意間看到項(xiàng)目中有小伙伴用到了 MapStruct 來做對(duì)象映射轉(zhuǎn)換當(dāng)時(shí)我就很好奇,這個(gè)是什么框架,能夠解決什么問題,帶著這兩個(gè)疑問就有了下面的文章2022-02-02

