SpringBoot 定时器@Scheduled的使用


前言

在开发中,经常需要执行定时任务,例如定时发送邮件、定时清理缓存等。

Spring框架提供了@Scheduled注解,可以方便地实现定时任务的调度和执行。

本文将详细介绍@Scheduled注解的属性和使用示例。


一、属性说明

@Scheduled注解的属性

  1. cron:用于指定Cron表达式,表示任务的执行时间规则。

示例:@Scheduled(cron = "0 0 0 * * ?") 表示每天凌晨执行任务。

  1. zone:用于指定时区,默认为服务器的时区。

示例:@Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai") 表示每天凌晨执行任务,时区为上海。

  1. fixedDelay:用于指定任务执行结束后的延迟时间,单位为毫秒。

示例:@Scheduled(fixedDelay = 5000) 表示任务执行结束后延迟5秒再次执行。

  1. fixedDelayString:与fixedDelay属性相同,但使用字符串形式表示延迟时间。

示例:@Scheduled(fixedDelayString = "PT5S") 表示任务执行结束后延迟5秒再次执行。

  1. fixedRate:用于指定任务执行的频率,单位为毫秒。

示例:@Scheduled(fixedRate = 10000) 表示每隔10秒执行一次任务。

  1. fixedRateString:与fixedRate属性相同,但使用字符串形式表示频率。

示例:@Scheduled(fixedRateString = "PT10S") 表示每隔10秒执行一次任务。

  1. initialDelay:用于指定任务首次执行的延迟时间,单位为毫秒。

示例:@Scheduled(initialDelay = 3000, fixedRate = 5000) 表示首次延迟3秒,然后每隔5秒执行一次任务。

  1. initialDelayString:与initialDelay属性相同,但使用字符串形式表示延迟时间。

示例:@Scheduled(initialDelayString = "PT3S", fixedRate = 5000) 表示首次延迟3秒,然后每隔5秒执行一次任务。

  1. CRON_DISABLED:用于表示禁用Cron表达式的特殊值。

示例:@Scheduled(cron = Scheduled.CRON_DISABLED) 表示禁用Cron表达式。

这些属性可以根据实际需求进行组合使用,以实现不同的定时任务调度策略。

二、Cron在线表达式生成器工具

三、使用示例

在启动类添加@EnableScheduling注解,表示开启定时器(在其它组件上添加注解也是可以的)

@SpringBootApplication
@EnableScheduling
public class ScheduledApplication extends SpringBootServletInitializer {

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

使用@Scheduled注解需要在类上添加@Service、@Component或其他类似的注解。这是因为@Scheduled注解是Spring框架提供的,它需要被Spring容器扫描并管理。

通过在类上添加@Service、@Component等注解,将该类标识为一个Spring组件,使得Spring容器能够自动扫描并实例化该类,并将其纳入到容器的管理范围内。这样,@Scheduled注解才能生效,定时任务才能被正确地执行。

除了@Service、@Component,还可以使用其他的注解,如@Controller、@Repository等,具体使用哪个注解取决于类的功能和用途。这些注解都是Spring框架提供的,用于标识和管理不同类型的组件。

@Component
public class ScheduleManager {

    @Scheduled(cron = "0 10 0 * * *")
    public void test() {
		// 执行逻辑
    }
}

四、多环境配置定时器

Scheduled.CRON_DISABLED的值为"-",即@Scheduled(cron = "-"),表示该定时器不执行

可用于开发环境与生产环境的控制,示例:

@Scheduled(cron = "${cron.test}")
private void test() {
	// 执行
}
# application-prod.yml
cron:
  test: 0 0 12 * * ? # 每天12点执行一次
  
# application-dev.yml
cron:
  test: '-' # 不执行

运行时切换配置环境该文章进行了讲解:Java 运行jar包变更配置文件与变量

相关推荐

  1. SpringBoot 定时器@Scheduled使用

    2024-03-24 07:26:03       16 阅读
  2. 【Spring】@Scheduled 定时器注解使用

    2024-03-24 07:26:03       13 阅读
  3. python自动定时任务schedule使用方法

    2024-03-24 07:26:03       27 阅读
  4. 使用Spring Boot整合定时任务(Schedule

    2024-03-24 07:26:03       13 阅读
  5. nodejs 定时任务执行 node-cron node-schedule

    2024-03-24 07:26:03       17 阅读
  6. @Scheduled注解创建定时任务 3 种模式

    2024-03-24 07:26:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 07:26:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 07:26:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 07:26:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 07:26:03       18 阅读

热门阅读

  1. Wpf-自定义控件波纹Button

    2024-03-24 07:26:03       20 阅读
  2. 【大厂面试题购物车】通关代码

    2024-03-24 07:26:03       17 阅读
  3. C++常用的库

    2024-03-24 07:26:03       17 阅读
  4. 基于FPGA的UDP协议栈设计第六章_仲裁模块设计

    2024-03-24 07:26:03       16 阅读
  5. leetcode - 362. Design Hit Counter

    2024-03-24 07:26:03       18 阅读
  6. v-if 遇到 el-form 表单验证规则遇到的bug

    2024-03-24 07:26:03       19 阅读
  7. c语言:日期识别1

    2024-03-24 07:26:03       17 阅读
  8. 单片机MCU,MPU,SOC的工艺结构原理及选型参数总结

    2024-03-24 07:26:03       21 阅读