SpringBoot整合@Scheduled定时任务的使用-从精通到陌生...
SpringBoot的定时任务是非常常用的功能,而@Scheduled注解则是SpringBoot实现定时任务最常用的一种方式。本文将从以下几个方面详细讲解SpringBoot整合@Scheduled定时任务的使用,帮助读者逐渐掌握使用到陌生的整个过程。
一、@Scheduled注解的基本使用
@Scheduled注解基本用法如下:
@Scheduled(cron = "*/5 * * * * *")
public void test(){
System.out.println("hello world");
}
执行结果为每5秒输出一次"hello world"字符串。
其中cron参数为定时任务执行的时间表达式,常用的表达式格式如下:
"0 0 12 * * ?" // 每天12点触发任务
"0 */1 * * * ?" // 每分钟执行一次任务
二、@Scheduled注解的参数详解
@Scheduled注解的参数也是很多的,下面我们来逐个讲解。
1.fixedDelay和fixedRate参数
- fixedDelay:任务间隔固定时间执行,比如间隔5秒执行。
- fixedRate:任务间隔固定时间执行,比如2秒执行一次任务,不论任务花费多久时间。
@Scheduled(fixedDelay = 5000) // 每隔5秒执行一次
public void testFixedDelay(){
System.out.println("fixedDelay:" + System.currentTimeMillis());
}
@Scheduled(fixedRate = 2000) // 每隔2秒执行一次
public void testFixedRate(){
System.out.println("fixedRate:" + System.currentTimeMillis());
}
2.initialDelay参数
initialDelay表示初始化后延迟多久才开始执行定时任务,单位为毫秒。比如下面这个代码表示启动后延迟2秒后执行定时任务。
@Scheduled(initialDelay = 2000, fixedDelay = 5000)
public void testInitialDelay(){
System.out.println("initialDelay:" + System.currentTimeMillis());
}
3.cron参数
cron参数是一个很灵活的参数,可以表示非常复杂的定时任务执行方式。下面是cron表达式的最常用写法:
"0 0 12 * * ?" // 每天12点触发任务
"0 */1 * * * ?" // 每分钟执行一次任务
上面这两个cron表达式都是非常常用的写法,下面我们再来看一个稍微复杂一点的示例,表示每月最后一个工作日的15点执行任务。
@Scheduled(cron = "0 0 15 ? * L")
public void testCron(){
System.out.println("testCron:" + System.currentTimeMillis());
}
4.zone参数
zone参数表示时区,可以覆盖Spring的默认时区。比如下面这个任务在北京时间晚上10点执行:
@Scheduled(cron = "0 0 22 * * ?", zone = "Asia/Shanghai")
public void testZone(){
System.out.println("testZone:" + System.currentTimeMillis());
}
三、@Scheduled注解注意事项
使用@Scheduled注解需要注意以下几点:
- 任务方法的返回值必须为void类型,不能有参数。
- 任务方法需为公有方法,不能为私有方法。
- 任务方法的执行时间必须小于间隔时间,否则可能出现多线程同时执行的情况。
- 如果@Scheduled注解作用在类上,则该类的方法都将被执行。
四、定时任务的异步执行
默认情况下,定时任务是同步执行的,执行时间较长可能会阻塞其他任务的执行。可以通过@EnableAsync注解启用异步执行任务,将任务执行放入线程池中,从而实现异步执行。
@Configuration
@EnableAsync
@Scheduled(cron = "*/5 * * * * *")
public class DemoTask {
@Async
public void testAsync(){
System.out.println("async task execute successful");
}
}
五、结语
本文通过详细讲解@Scheduled注解的基本使用和参数详解,以及注意事项和异步执行等方面,希望读者可以逐渐掌握使用到陌生的整个过程。定时任务虽然看似简单,但是在开发中用到的地方还是很多的,希望读者可以多加实践,熟能生巧。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot整合@scheduled定时任务的使用-从精通到陌生… - Python技术站