【Java】SpringBoot使用@Scheduled定义定时任务

1、开启扫描
PS:springboot项目无需额外引入依赖
在启动类Application类上面加上注解 @EnableScheduling

2、定时方法上面添加注解的使用方法

1)指定间隔时间执行,单位毫秒。
fixedRate 和 fixedRateString是同样的效果,只是一个值是long,一个是String。

@Scheduled(fixedRate = 10_000L)
public void test() {
   ... ...
}

【执行时间实例】
服务启动完成时间点:2021-03-18 19:33:00
定时任务执行时间点:
2021-03-18 19:33:00
2021-03-18 19:33:10
2021-03-18 19:33:20
...

使用fixedRate时,服务启动后会立刻执行一次,后续则间隔定义的时间后再执行。

2)延迟执行第一次,后续则按照时间间隔执行。
initialDelay 指定延迟执行时间,单位毫秒。定时任务将在服务启动后,延迟N时间后执行第一次。

@Scheduled(initialDelay =  1000L, fixedRate = 10_000L)
public void test() {
   ... ...
}

【执行时间实例】
服务启动完成时间点:2021-03-18 19:33:00
定时任务执行时间点:
2021-03-18 19:33:01
2021-03-18 19:33:11
2021-03-18 19:33:21
...

3)通过cron 表达式指定定时任务执行时间。

@Scheduled(cron = "0 0 0/2 * * ?")
public void test() {
   ... ...
}

【执行时间实例】
服务启动完成时间点:2021-03-18 19:33:00
定时任务执行时间点:
2021-03-18 20:00:00
2021-03-18 22:00:00
2021-03-19 00:00:00
...

cron的值设置可以使用这个在线工具获得:http://cron.qqe2.com/

4)使用注解@PostConstruct – 不建议使用
@PostConstruct注解可使定时任务在服务启动时执行一次,虽然能达到一些目的,但是存在坑:

使用@PostConstruct 注解后,该定时任务要执行完毕后,服务才能完全启动,若该定时任务执行过程中遇到异常,则服务启动中止。故而不建议使用这个注解。

而且若是在定时任务中有通过context上下文获取配置数据时,此时上下文可能是null,会导致异常。

@PostConstruct
@Scheduled(cron = "0 0 0/2 * * ?")
public void test() {
   ... ...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值