首页 > 基础资料 博客日记
springboot定时任务在项目启动后立即执行一次
2024-10-18 03:00:07基础资料围观83次
Java资料网推荐springboot定时任务在项目启动后立即执行一次这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
背景: 写了一个定时任务去每隔15分钟,定时从三方系统获取凭证,然后更新到Redis中去。
存在问题: 当项目重新启动时定时任务要等15分钟才能去获取,中间存在空挡期。
解决办法: 让定时任务在项目启动后立即执行一次,后续按照cron表达式正常执行
方案一:使用 @PostConstruct
@PostConstruct注解标注的方法会在bean 加载时主动执行该方法
@Scheduled(cron = "0 */15 * * * ? ")
public void updateAuthorization() {
LockUtil.tryLock(key, () -> {
log.info("开始刷新访问凭证========");
//业务代码
log.info("刷新访问凭证结束========");
}, e -> log.error("刷新访问凭证失败", e));
}
//bean加载时主动执行的方法
@PostConstruct
public void init(){
updateAuthorization();
}
notes:但是此方法可能会出现问题,当你的业务处理中用了其他的bean的时候 该bean可能可能还未被放进spring容器中,从而存在隐患。
方案二:实现 ApplicationRunner 接口
ApplicationRunner接口里有一个run()方法,实现这个接口,并重写run()方法,在run()方法中直接调用定时任务即可。
我是新写了一个类,这个类可以用来专门去提供 项目启动后 的一些处理操作,不去破坏原有的线程独立。
/**
* @author : lichengqian
* 2024-07-19 11:23
*/
/**
* 该类中的run方法在项目启动后会立即执行一次
*/
@Component
public class StartRunner implements ApplicationRunner {
@Resource
AuthorizationScheduler authorizationScheduler;
//项目启动后会立即执行一次
@Override
public void run(ApplicationArguments args) throws Exception {
authorizationScheduler.updateAuthorization();
//其他需要启动后执行的处理操作
}
}
文章来源:https://blog.csdn.net/qq_44642851/article/details/140627229
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: