SpringBoot 定时器@Scheduled的使用

51 篇文章 9 订阅 ¥29.90 ¥99.00


前言

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

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包变更配置文件与变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一碗情深

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

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

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

打赏作者

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

抵扣说明:

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

余额充值