SpringBoot项目使用Spring-Task实现定时任务

发布时间:2024年01月17日

1、在启动类上加@EnableScheduling注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class TimerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(TimerDemoApplication.class, args);
    }
}

2.在无返回值无参数方法上加@Scheduled注解

创建一个定时任务时,在无返回值无参数方法上加@Scheduled注解,表示该方法根据注解的规则定时执行

@Scheduled(cron = "0 0 2 * * ? ")
public void timerDemo() {
}

3.在配置文件中设置相关配置信息

# Spring配置信息
spring:
  # task相关配置
  task:
    scheduling:
      # 任务调度线程池大小,默认1
      pool:
        size: 1
      # 调度线程名称前缀,默认scheduling
      thread-name-prefix: read_from_xml
      shutdown:
        # 线程池关闭时等待所有任务完成
        await-termination: false
        # 线程池关闭时等待所有任务完成的最长时间,单位毫秒,默认-1
        await-termination-period: 30000

4.@Scheduled注解的支持方式

(1)cron方式

@Scheduled(cron = "0 0 0 * * ? ")

该参数接收一个cron表达式,cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义

(2)固定速率
initialDelay:第一次延迟多长时间后再执行
initialDelayString:与 initialDelay 意思相同,只是使用字符串的形式,唯一不同的是支持占位符
fixedDelay:上一次执行完毕时间点之后多长时间再执行
fixedDelayString:与 fixedDelay 意思相同,只是使用字符串的形式,唯一不同的是支持占位符

//单位毫秒
//@Scheduled(initialDelay = 5000, fixedDelayString = "2000")
@Scheduled(initialDelay = 5000, fixedDelay = 2000)

(3)固定延时
initialDelay:第一次延迟多长时间后再执行
initialDelayString:与 initialDelay 意思相同,只是使用字符串的形式,唯一不同的是支持占位符
fixedRate:上一次开始执行时间点之后多长时间再执行
fixedRateString:与 fixedRate 意思相同,只是使用字符串的形式,唯一不同的是支持占位符

//单位毫秒
@Scheduled(initialDelay = 5000, fixedRate = 2000)

5.cron表达式语法

cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义

//[年]不是必须的域,可以省略[年]
[] [] [小时] [] [] [] []
是否必填值范围可以使用的通配符
0-59, - * /
0-59, - * /
小时0-23, - * /
1-31, - * ? / L W
1-12 / JAN-DEC, - * /
1-7 / SUN-SAT, - * ? / L #
1970-2099, - * /

通配符说明:

  • “*”:表示所有值
  • “?”:表示不指定值。使用的场景为不需要关心当前设置这个字段的值
  • “-” :表示区间
  • “,”:表示指定多个值
  • “/”:用于递增触发
  • “L”:表示最后的意思
  • “W”: 表示离指定日期的最近那个工作日(周一至周五)(注,”W”前只能设置具体的数字,不允许区间”-“)
  • “#”:序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置
文章来源:https://blog.csdn.net/Lyhdreamer/article/details/135648000
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。