本文目录:

  • 引言
  • 1.注解的使用
  • 2.cron 表达式介绍
  • Ⅰ.各字段含义
  • Ⅱ.特殊字符代表含义
  • Ⅲ.常用 cron 表达式介绍


引言

       项目开发中经常需要执行一些定时任务,比如:需要在每天凌晨时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供 TaskExecutor 、TaskScheduler 接口。Spring Boot 项目,我们要开启一个定时任务,需要如下两步走:

  1. 项目中会用到 @EnableScheduling@Scheduled 两个注解。
  2. 需要我们来编写一个 cron 表达式来指定任务执行规则。

1.注解的使用

  ①需要在项目启动类上标注 @EnableScheduling 注解

@EnableScheduling //开启基于注解的定时任务
@SpringBootApplication
public class Springboot04TaskApplication {

	public static void main(String[] args) {
		SpringApplication.run(Springboot04TaskApplication.class, args);
	}
}

  ②在具体的业务执行方法上标注 @Scheduled注解

@Service
public class xxxService{

	@Scheduled(cron = "0/4 * * * * MON-SAT")
	public void xxxMethod(){
		//此处为具体业务逻辑方法
		System.out.println("业务逻辑方法");
	}
}

2.cron 表达式介绍

       我们可以通过编写 cron 表达式来指定定时任务执行的规则。cron 表达式由 7 个部分组成,各部分之间用空格隔开,Cron表达式的7个部分从左到右代表的含义如下:

秒(second)

分(minute)

时(hour)

日(day of month)

月(month)

星期(day of week)

年(year)

Ⅰ.各字段含义

字段

允许值

允许的特殊字符

秒(second)

0-59的整数

, - * /

分(minute)

0-59的整数

, - * /

时(hour)

0-23的整数

, - * /

日(day of month)

1 ~ 31的整数(但是你需要考虑你月的天数)

, - * ? / L W C

月(month)

1-12的整数( 或者JAN-DEC)

, - * /

星期(day of week)

1-7的整数( 或者MON-SUN)(1代表星期日)

, - * ? / L W C

年(year)

1970 ~ 2099(该字段为可选字段)

, - * /

Ⅱ.特殊字符代表含义

特殊字符

代表含义

,

枚举

-

区间

*

任意

/

步长

?

日&星期冲突时匹配解决方案

L

最后

W

工作日

C

和calendar联系后计算过的值

#

星期。eg:4#2,表示第2个星期4

提示:星期和日不能同时为 * 。必须一个是*,另一个就是?。否则会报Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.错误。

Ⅲ.常用 cron 表达式介绍

cron表达式

表达式代表含义

0 0/5 14,18 * * ?

每天14点整,和18点整,每隔5分钟执行一次

0 15 10 ? * 1-6

每个月的周一至周六10:15分执行一次

0 0 2 ? * 6L

每个月的最后一个周六凌晨2点执行一次

0 0 2 LW * ?

每个月的最后一个工作日凌晨2点执行一次

0 0 2-4 ? * 1#1

每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次

0/4 * * * * MON-SAT

周一到周六,每4秒执行一次

0,1,2 * * * * MON-SAT

周一到周六,每分钟的 0,1,2 秒执行一次

0 0 2 1 * ? *

表示在每月的1日的凌晨2点执行一次

0 15 10 ? * MON-FRI

表示周一到周五每天上午10:15执行一次

0 15 10 ? 6L 2002-2006

表示2002-2006年的每个月的最后一个星期五上午10:15执行作

0 0 10,14,16 * * ?

每天上午10点,下午2点,4点

0 0/30 9-17 * * ?

朝九晚五工作时间内每半小时

0 0 12 ? * WED

表示每个星期三中午12点

0 0 12 * * ?

每天中午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期间的每1分钟触发

0 0/5 14 * * ?

在每天下午2点到下午2:55期间的每5分钟触发

0 0/5 14,18 * * ?

在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0-5 14 * * ?

在每天下午2点到下午2:05期间的每1分钟触发

0 10,44 14 ? 3 WED

每年三月的星期三的下午2:10和2:44触发

0 15 10 ? * MON-FRI

周一至周五的上午10:15触发

0 15 10 15 * ?

每月15日上午10:15触发

0 15 10 L * ?

每月最后一日的上午10:15触发

0 15 10 ? * 6L

每月的最后一个星期五上午10:15触发

0 15 10 ? * 6L 2002-2005

2002年至2005年的每月的最后一个星期五上午10:15触发

0 15 10 ? * 6#3

每月的第三个星期五上午10:15触发

你也可以搜索一下,网上有提供自定义 cron 表达式的工具类。

  1. 在线 cron 表达式生成器(1)
  2. 在线 cron 表达式生成器(2)

以上两步完成,Spring Boot 定时任务则配置OK

如果本文对你有所帮助,那就给我点个赞呗

End