Spring Boot 配置定时任务

引言

       项目开发中经常需要执行一些定时任务,比如:需要在每天凌晨时候,分析一次前一天的日志信息。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 * * ? 20052005年的每天上午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-20052002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3每月的第三个星期五上午10:15触发

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

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

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

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

End

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot提供了一种简单而强大的方式来实现定时任务调度。下面是使用Spring Boot实现定时任务调度的步骤: 1. 添加依赖:在`pom.xml`文件添加Spring Boot定时任务依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. 创建定时任务类:创建一个继承自`QuartzJobBean`的定时任务类,并实现`executeInternal`方法,该方法编写具体的定时任务逻辑。 ```java import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class MyJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { // 定时任务逻辑 System.out.println("定时任务执行..."); } } ``` 3. 配置定时任务:在`application.properties`或`application.yml`文件配置定时任务的相关属性,例如触发时间、触发频率等。 ```yaml spring: quartz: job-store-type: memory properties: org: quartz: scheduler: instanceName: MyScheduler instanceId: AUTO job-details: my-job: cron: 0/5 * * * * ? job-class-name: com.example.MyJob ``` 4. 启动定时任务:在Spring Boot的启动类上添加`@EnableScheduling`注解,开启定时任务的自动配置。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 5. 运行定时任务:启动Spring Boot应用程序后,定时任务将按照配置的触发时间和频率执行。 以上就是使用Spring Boot实现定时任务调度的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值