当你希望在 Spring Boot 中创建一个定时任务,并根据 YAML 配置文件中的 Cron 表达式来执行时,你可以使用
@Scheduled
注解配合 SpEL(Spring Expression Language)表达式来实现。下面是一个示例:
-
在
application.yml
配置文件中添加一个属性,用来指定 Cron 表达式:
custom:
cronExpression: "0 * * * * *"
- 创建一个定时任务的类,使用
@Scheduled
注解来执行任务,并使用 @Value
注解来注入配置值:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class CustomCronScheduledTask {
@Value("${custom.cronExpression}")
private String cronExpression;
@Scheduled(cron = "${custom.cronExpression}")
public void executeTask() {
System.out.println("Task executed at " + System.currentTimeMillis());
在上述示例中,使用 @Value("${custom.cronExpression}")
注解将配置值注入到 cronExpression
属性中。然后,使用 @Scheduled(cron = "${custom.cronExpression}")
注解来指定定时任务的 Cron 表达式,使用 ${custom.cronExpression}
表达式引用配置值。
这样,定时任务将根据 YAML 配置文件中的 Cron 表达式进行执行。
同样,需要在 Spring Boot 应用程序的入口类上添加 @EnableScheduling
注解,以启用定时任务的支持:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
根据你的需求和 Cron 表达式配置,可以适当调整配置文件中的 Cron 表达式值。
然后,在你的定时任务类中使用@ConditionalOnProperty注解,根据配置的属性值来决定是否启用定时任务。要通过.yml配置文件控制所有定时任务的开启或关闭,你可以使用Spring Boot的属性配置功能。这样子我们只需要在.yml文件中的控制true开启或false不开启即可。
Cron 表达式是一个字符串,分为 6 或 7 个域,每一个域代表一个含义 Cron 有如下两种语法格式:
Seconds Minutes Hours Day Month Week Year
Seconds Minutes Hours Day Mon...
在 .yaml 或 .properties中配置定时任务 cron 表达式
建一个定时任务配置读取类,读取 .properties 中的配置表达式
写自己的定时任务类,实现Runnable 接口
建一个定时任务调度类(类名随意:ScheduledTasks.java ),负责调度所有的任务
从Application启动任务调度
@Component
@PropertySource(value = "classpath:jobTask.properties",encoding = "UTF-8")
public class InactiveAccountJob {
@Scheduled(cron = "${inactiveaccountCron}")
public void syncInactiveAccount() {
resources/jobTask.properties
inactiv.
corn表达式格式为七个域,如:秒 分 时 日 月 周 年每一个域之间空格隔开,不指定“年”域时,年域可省略不写,如:秒 分 时 日 月 周名称是否必要值范围特殊字符秒必要0-59, - * /分必要0-59, - * /时必要0-23, - * /日必要1-31, - *?/ L W C月必要1-12 或 JAN-DEC, - * /周必要1-7 或 SUN-SAT, - *?/ L C #年不必要空 或 1970-2099。
最近几个月写了几个定时任务,简略学习了一下cron定时通配符。
发现现在能找到的博客教学都局限于“能用”的程度。于是决定根据实际使用的情况总结一下,主要是通配符的各种使用情况。
毕竟只是简单学习,很多地方可能用词不是很严谨,还请多多担待。
首先是cron表达式的语法:
格式: [秒] [分] [小时] [日] [月] [周] [年]
各位置可用值以及通配符,我写成了表格的形式,更直观一些。
顺带一提,周和月这两个地方的值可以用“JAN-DEC、SUN-SAT”代替,不过还是希望大家可以善待自己也善待别人。
Scheduled注解详解
概述@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。注意需要配合@EnableScheduling使用,@Scheduled主要有三种配置执行时间的方式:croncron是@Scheduled的一个参数,是一个字符串,以5个空格隔开,只允许6个域(注意不是7个,7个直接会报错),分别表示秒、分、时、日、月、周cron通配符秒0-59,- * /分0-59,- * /时0-23,- * /日1
除了上面的借助cron表达式的方法,还有另一种触发器,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,不像cron表达式只能定义小于等于间隔59秒。需要开通正版IDEA的可以加我微信:poxiaozhiai6,56元一年。可以看到任务变成了15秒执行一次。