SpringBoot为我们内置了@Scheduled定时任务,下面我们就来配置下这个注解,找到入口程序添加注解@EnableScheduling,添加注解后SpringBoot就已经认定了我们要使用定时任务来完成一些业务逻辑了,内部会对应原始配置定时任务添加对应的配置文件
@EnableScheduling
@SpringBootApplication
public class SpringBootVenusApplication {
public static void main(String[] args) {
// 启动spring-boot-venus
ConfigurableApplicationContext context = SpringApplication.run(SpringBootVenusApplication.class, args);
}
}
@scheduled
@scheduled注解用来配置到方法上来完成对应的定时任务的配置,如执行时间,间隔时间,延迟时间等等,下面我们就来详细的看下对应的属性配置
下面我们来配置@Scheduled,来完成每小时输出内容
/**
* 每小时执行一次
*/
@Scheduled(cron = "0 0 0/1 * * ? ")
public void hello() throws Exception {
System.out.println("HelloScheduled...");
}
cron属性
Seconds : 可出现", - * /"四个字符,有效范围为0-59的整数
Minutes : 可出现", - * /"四个字符,有效范围为0-59的整数
Hours : 可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth : 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
Month : 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek : 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year : 可出现", - * /"四个字符,有效范围为1970-2099年
下面简单举几个例子:
"0 0 12 * * ?" 每天中午十二点触发
"0 15 10 ? * *" 每天早上10:15触发
"0 15 10 * * ?" 每天早上10:15触发
"0 15 10 * * ? *" 每天早上10:15触发
"0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发
initialDelay属性
该属性的含义是指在项目启动后在定义的时间后开启定时任务,配合fixedRate()和fixedDelay()使用
fixedRate属性
该属性的含义是调用固定周期(以毫秒为单位)执行方法:就是上一次开始执行时间点之后延迟执行
//在项目启动 5s 后,每隔 2s 调用定时任务
@Scheduled(initialDelay = 5000, fixedRate = 2000)
public void testScheduled() throws Exception {
System.out.println("开启任务:" + new Date());
//模拟任务执行所需时间
Thread.sleep(1000);
System.out.println("执行任务:" + new Date());
}
- 当任务执行时间小于或等于fixedRate的参数时:定时任务以fixedRate的参数周期进行调用
- 当任务执行时间大于fixedRate的参数时:定时任务不以fixedRate的参数周期进行调用,而是在上一次执行完毕时间直接执行
fixedDelay属性
该属性的含义是上次调用结束和下一次调用结束之间的固定周期(以毫秒为单位)执行方法:就是上一次执行完毕时间点之后延迟执行。
注意:
1、cron、fixedDelay、fixedRate 三者之间不能共存!!!
2、fixedDelay、fixedRate不能单独使用!!!
会抛出一个错误:
Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'testScheduled': Exactly one of the 'cron', 'fixedDelay(String)', or 'fixedRate(String)' attributes is required.
网友评论