说到定时任务,我们应该会想起@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 服务启动时执行内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论