SpringBoot中@Scheduled实现服务启动时执行一次
说到定时任务,我们应该会想起@Scheduled,Quartz以及XXL-JOB,但是有的单体服务或者小项目,为了方便快捷,可能会直接使用@Scheduled去实现异步任务。因此,从而延伸出本文的主题需求。
当项目中使用@Scheduled,如何在项目启动的时候让指定的异步任务提前执行一次?
一、@Scheduled详解
@Scheduled注解支持多个参数,用于灵活控制任务执行时间
cron:Cron表达式,可以精准控制秒、分、小时、日、月、周等

- zone:接收一个时区,比如我们一般使用的时区Asia/Shanghai,该字段我们一般留空。
- fixedDelay:上一次执行完毕时间点之后多长时间再执行。如@Scheduled(fixedDelay = 5000)
- fixedDelayString:与 fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符,如@Scheduled(fixedDelayString = “5000”)
- fixedRate:上一次开始执行时间点之后多长时间再执行,如@Scheduled(fixedRate = 5000)
- fixedRateString:与 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
- initialDelay:第一次延迟多长时间后再执行,如第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次@Scheduled(initialDelay=1000, fixedRate=5000)
- initialDelayString:与 initialDelayString 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
二、逻辑实现
1、创建定时任务逻辑方法
/**
* @Author 码至终章
* @Version 1.0
*/
@Component
public class ScheduledTest {
@Scheduled(cron = "* 1 * * * ?")
public void task1() throws Exception{
System.out.println("task1 执行: " + Thread.currentThread() + "-" + DateTime.now());
}
}
2、新建一个启动执行类
该类主要在启动时手动调用指定的任务方法
/**
* @Author 码至终章
* @Version 1.0
*/
@Component
public class StartupTasks {
private final ScheduledTest scheduledTasks;
public StartupTasks(ScheduledTest scheduledTasks) {
this.scheduledTasks = scheduledTasks;
}
@PostConstruct
public void startUp() {
try {
System.out.println("服务启动执行任务");
scheduledTasks.task1();
}catch (Exception e){
e.printStackTrace();
}
}
}
注:启动类记得自己加上@EnableScheduling,定时任务 才会执行,当然这个不影响本文的逻辑测试
三、测试结果
服务启动后,查看打印信息

到此这篇关于SpringBoot中@Scheduled实现服务启动时执行一次的文章就介绍到这了,更多相关SpringBoot 服务启动时执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
springboot整合ehcache 实现支付超时限制的方法
在线支付系统需要极高的稳定性,在有限的系统资源下,稳定性优先级要高于系统并发以及用户体验,因此需要合理的控制用户的支付请求。下面通过本文给大家介绍springboot整合ehcache 实现支付超时限制的方法,一起看看吧2018-01-01
关于@Component注解下的类无法@Autowired问题
这篇文章主要介绍了关于@Component注解下的类无法@Autowired问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03
剑指Offer之Java算法习题精讲N叉树的遍历及数组与字符串
跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化2022-03-03


最新评论