添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

当你希望在 Spring Boot 中创建一个定时任务,并根据 YAML 配置文件中的 Cron 表达式来执行时,你可以使用 @Scheduled 注解配合 SpEL(Spring Expression Language)表达式来实现。下面是一个示例:

  1. application.yml 配置文件中添加一个属性,用来指定 Cron 表达式:
custom:
  cronExpression: "0 * * * * *" # 每分钟的第 0 秒执行
  1. 创建一个定时任务的类,使用 @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秒执行一次。