SpringTask实现定时任务
只需要添加SpringTask的配置就可以实现定时任务。
@Configuration
@EnableScheduling
public class SpringTaskConfig {
}
具体实现:
/**
1. @author:
2. @date: 2023/3/22 14:38
3. @description: 测试定时任务 每隔五秒打印一下日志
*/
@Component
public class TestTask {
private static final Logger LOGGER = LoggerFactory.getLogger(TestTask.class);
@Scheduled(cron = "0/5 * * ? * ?")
public void test(){
LOGGER.info("test");
}
}
日志:
2023-03-22 14:49:30.014 INFO 10332 --- [ scheduling-1] com.peng.mmall.TestTask : test
2023-03-22 14:49:35.013 INFO 10332 --- [ scheduling-1] com.peng.mmall.TestTask : test
2023-03-22 14:49:40.012 INFO 10332 --- [ scheduling-1] com.peng.mmall.TestTask : test
2023-03-22 14:49:45.015 INFO 10332 --- [ scheduling-1] com.peng.mmall.TestTask : test
2023-03-22 14:49:50.004 INFO 10332 --- [ scheduling-1] com.peng.mmall.TestTask : test
Cron表达式详解:
1.Cron格式(Seconds Minutes Hours DayofMonth Month DayofWeek):
时间元素 | 可能出现的字符 | 数值范围 |
---|---|---|
Seconds | , - * / | 0-59 |
Minutes | , - * / | 0-59 |
Hours | , - * / | 0-23 |
DayofMonth | , - * / ? L W | 0-31 |
Month | , - * / | 1-12 |
DayofWeek | , - * / ? L # | 1-7或SUN-SAT |
2.Cron格式字符的含义
字符 | 含义 | 例子 |
---|---|---|
* | 表示匹配该域的任意值 | 即表示每分钟都会触发事件 |
? | 表示没有具体的值,只能用在DayofMonth和DayofWeek两个域 | 例如指定每月的某日,那在DayofWeek就为?, |
- | 表示范围 | 例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次 |
/ | 表示起始时间开始触发,然后每隔固定时间触发一次 | 例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次 |
, | 表示列出枚举值 | 例如在Minutes域使用5,20,则意味着在5和20分每分钟触发一次 |
L | 表示最后,只能出现在DayofWeek和DayofMonth域 | 如果在DayofWeek域使用5L,意味着在最后的一个星期四触发 |
W | 表示有效工作日(周一到周五),只能出现在DayofMonth域 | 系统将在离指定日期的最近的有效工作日触发事件。例如在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日-星期五,即4日触发 |
LW | 表示在某个月最后一个工作日,即最后一个星期五 | |
# | 用于确定每个月第几个星期几,只能出现在DayofMonth域 | 例如在4#2,表示某月的第二个星期三 |