java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot定时任务报错Unexpected error occurred in scheduled task

如何解决SpringBoot定时任务报错Unexpected error occurred in scheduled task问题

作者:栖迟于一丘

这篇文章主要介绍了如何解决SpringBoot定时任务报错Unexpected error occurred in scheduled task问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题

spring boot项目在线上一直正常运行没有错误,然后今天发生了报错,如图

这是一个定时器错误,发生这个报错

主要有两个原因

以下是我的代码

@RestController
@Slf4j
@SuppressWarnings({"all"})
@CrossOrigin
@RequestMapping("/journal")
@Component
public class JournalController {

	@Autowired
    Journal_timeMapper journal_timeMapper;
    
       /**
     * 每周日将签到时间数据清空
     */
    @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);
        }
    }


    /**
     * 每天晚上将一天签到数据清空
     */
    @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,它实现了这个接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入进来

修改后的代码

@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);
    }

    
    
       /**
     * 每周日将签到时间数据清空
     */
    @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);
        }
    }


    /**
     * 每天晚上将一天签到数据清空
     */
    @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);
        }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文