您的位置:首页 > 健康 > 养生 > 下载应用市场_武汉seo推广优化_免费发广告的平台_百度com百度一下你

下载应用市场_武汉seo推广优化_免费发广告的平台_百度com百度一下你

2024/12/23 12:45:11 来源:https://blog.csdn.net/weixin_44023931/article/details/143324893  浏览:    关键词:下载应用市场_武汉seo推广优化_免费发广告的平台_百度com百度一下你
下载应用市场_武汉seo推广优化_免费发广告的平台_百度com百度一下你

SpringBoot 定时任务 @Scheduled 详细解析

@Scheduled

@Scheduled是Spring框架提供的一个注解,用于在Spring应用中定义定时任务。通过使用 @Scheduled注解,可以简化配置和管理定时任务流程,无需编写复杂的调度逻辑。

启动定时任务

在使用 @Scheduled注解之前,需要在Spring配置类中启用定时任务支持。通常在Spring Boot应用的主配置类上添加 @EnableScheduling注解。

定义定时任务

在需要执行定时任务的方法前,自定义@Scheduled的调度策略

1. cron (常用)

使用Cron表达式来指定调度时间。Cron表达式是一个字符串,用于定义任务的执行时间。
cron表达式格式

秒 分 时 日 月 周 年(可选)

例如:
“0 0 1 * * ?”:每天凌晨1点执行。
“0 0/5 * * * ?”:每5分钟执行一次。
“0 0 12 ? * WED”:每周三中午12点执行。

@Scheduled(cron = "0 0 1 * * ?")
public void cronTask() {System.out.println("Cron task - " + System.currentTimeMillis());
}

2. fixedRate

每隔固定的时间间隔执行一次任务。无论上一次任务是否完成,都会在指定的时间间隔后再次启动任务。

@Scheduled(fixedRate = 5000)
public void fixedRateTask() {System.out.println("Fixed rate task - " + System.currentTimeMillis());try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}
}

3. fixedDelay

在上一次任务完成后,等待固定的时间间隔再执行下一次任务。

@Scheduled(fixedDelay = 3000)
public void fixedDelayTask() {System.out.println("Fixed delay task - " + System.currentTimeMillis());try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}
}

4. initialDelay

首次执行任务前的延迟时间,可以与 fixedRate 或 fixedDelay 一起使用。适用于不想让任务立即执行的情况

@Scheduled(initialDelay = 2000, fixedRate = 5000)
public void initialDelayTask() {System.out.println("Initial delay task - " + System.currentTimeMillis());
}

5. zone

用于指定定时任务的时间区域(时区)。这对于跨时区的应用非常重要,因为它确保定时任务在指定的时区中按预期时间执行。就像下面这个例子,每天在北京时间凌晨一点执行,而不是美国中部时间的1点。

@Scheduled(cron = "0 0 1 * * ?", zone = "Asia/Shanghai")
public void scheduledTask() {// 任务逻辑
}

6. timeUnit

用于指定时间的间隔单位,默认为 毫秒

  • TimeUnit.NANOSECONDS:纳秒
  • TimeUnit.MICROSECONDS:微秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.SECONDS:秒
  • TimeUnit.MINUTES:分钟
  • TimeUnit.HOURS:小时
  • TimeUnit.DAYS:天
@Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS)
public void scheduledTask() {}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com