springboot中quartz可以作定时任务,@Scheduled也可以
Spring Boot启动类标注@EnableScheduling,然后再开发一个服务类,:
测试简易定时任务:
package com.springboot.chapter13.service.impl;
/**** imports ****/
@Service
public class ScheduleServiceImpl {
// 计数器
int count1 = 1;
int count2 = 1;
// 每隔一秒执行一次
@Scheduled(fixedRate = 1000)
// 使用异步执行
@Async
public void job1() {
System.out.println("【" +Thread.currentThread().getName()+"】"
+ "【job1】每秒钟执行一次,执行第【" + count1 + "】次");
count1 ++;
}
// 每隔一秒执行一次
@Scheduled(fixedRate = 1000)
// 使用异步执行
@Async
public void job2() {
System.out.println("【" +Thread.currentThread().getName()+"】"
+ "【job2】每秒钟执行一次,执行第【" + count2 + "】次");
count2 ++;
}
}
这里的注解@Scheduled配置为按时间间隔执行,每隔1 s便执行一次。使用@Async注解代表这需要使用异步线程执行,上述中@Scheduled只是按照时间间隔执行,有时候需要指定更为具体的时间,例如,每天晚上11:00开始跑批量生成报表,或者一些任务在每周日执行。为了能够更为精确地指定任务执行的时间,所以有必要更为细致地研究@Scheduled的配置项,如表13-1所示。
表13-1中的配置项除了cron外都比较好理解,只有cron是可以通过表达式更为灵活地配置运行的方式。cron有6~7个空格分隔的时间元素,按顺序依次是“秒 分 时 天 月 星期 年”,其中年是一个可以不配置的元素,例如下面的配置:
0 0 0 ? * WED 这个配置表示每个星期三中午0点整。这个表达式需要注意的是其中的特殊字符,如?和*,这里因为天和星期会产生定义上的冲突,所以往往会以通配符?表示,它表示不指定值,而*则表示任意的月。除此以外还会有表13-2所示的其他通配符。 表13-2 通配符含义 为了说明它们的使用,下面举例如表13-3所示。