SpringBoot执行定时任务@Scheduled的方法

作者:返回主页 胖墩哥 时间:2022-08-13 03:43:31 

在做项目时,需要一个定时任务来接收数据存入数据库,后端再写一个接口来提供该该数据的最新的那一条。

数据保持最新:设计字段sign的值(0,1)来设定是否最新

定时任务插入数据:首先进行更新,将所有为1即新数据设置过期,然后插入新数据,设置sign为1。这两个操作是原子操作。通过添加事务来进行控制。

Java 定时任务的几种实现方式

  • 基于 java.util.Timer 定时器,实现类似闹钟的定时任务

  • 使用 Quartz、elastic-job、xxl-job 等开源第三方定时任务框架,适合分布式项目应用

  • 使用 Spring 提供的一个注解: @Schedule,开发简单,使用比较方便,也是本文介绍的一种方式

Spring 提供的一个注解: @Schedule,开发简单,使用比较方便,也是本文介绍的一种方式

Spring 自身提供了对定时任务的支持,本文将介绍 Spring Boot 中 @Scheduled 定时器的使用。

创建定时任务

首先,在项目启动类上添加@EnableScheduling注解,开启对定时任务的支持


@SpringBootApplication
@EnableScheduling
public class ScheduledApplication {

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

}

其中 @EnableScheduling注解的作用是发现注解@Scheduled的任务并后台执行。

其次,编写定时任务类和方法,定时任务类通过Spring IOC 加载 ,使用@Component 注解,定时方法使用@Scheduled 注解。


@Component
public class ScheduledTask {

@Scheduled(fixedRate = 3000)
public void scheduledTask() {
System.out.println("任务执行时间:" + LocalDateTime.now());
}
}

fixedRate 是 long 类型,表示任务执行的间隔毫秒数,以上代码中的定时任务每 3 秒执行一次。

@Scheduled详解

在上面的入门例子中,使用了@Scheduled(fixedRate = 3000) 注解来定义每过 3 秒执行的任务,对于 @Scheduled 的使用可以总结如下几种方式:

  • @Scheduled(fixedRate = 3000) :上一次开始执行时间点之后 3 秒再执行(fixedRate 属性:定时任务开始后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)

  • @Scheduled(fixedDelay = 3000) :上一次执行完毕时间点之后 3 秒再执行(fixedDelay 属性:定时任务执行完成后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)

  • @Scheduled(initialDelay = 1000, fixedRate = 3000) :第一次延迟1秒后执行,之后按fixedRate的规则每 3 秒执行一次(initialDelay 属性:第一次执行定时任务的延迟时间,需配合fixedDelay或者fixedRate来使用)

  • @Scheduled(cron="0 0 2 1 * ? *") :通过cron表达式定义规则

其中,常用的cron表达式有:

  • 0 0 2 1 * ? * :表示在每月 1 日的凌晨 2 点执行

  • 0 15 10 ? * MON-FRI :表示周一到周五每天上午 10:15 执行

  • 0 15 10 ? 6L 2019-2020 :表示 2019-2020 年的每个月的最后一个星期五上午 10:15 执行

  • 0 0 10,14,16 * * ? :每天上午 10 点,下午 2 点,4 点执行

  • 0 0/30 9-17 * * ? :朝九晚五工作时间内每半小时执行

  • 0 0 12 ? * WED :表示每个星期三中午 12 点执行

  • 0 0 12 * * ? :每天中午 12点执行

  • 0 15 10 ? * * :每天上午 10:15 执行

  • 0 15 10 * * ? :每天上午 10:15 执行

  • 0 15 10 * * ? * :每天上午 10:15 执行

  • 0 15 10 * * ? 2019 :2019 年的每天上午 10:15 执行

总结

本文主要介绍了基于 Spring Boot 内置的定时任务的配置使用,主要涉及两个注解,四个属性的配置:

主程序入口 @EnableScheduling 开启定时任务定时方法上 @Scheduled 设置定时cron属性:按cron规则执行fixedRate 属性:以固定速率执行fixedDelay 属性:上次执行完毕后延迟再执行initialDelay 属性:第一次延时执行,第一次执行完毕后延迟后再次执行

来源:https://www.cnblogs.com/jimlau/p/13283064.html

标签:SpringBoot,定时任务,@Scheduled
0
投稿

猜你喜欢

  • Java实现合并两个有序序列算法示例

    2021-09-06 23:23:53
  • 详解Java并发包中线程池ThreadPoolExecutor

    2022-03-23 19:57:20
  • SpringBoot整合ActiveMQ的详细步骤

    2023-08-25 07:03:44
  • Java面向对象的封装你了解吗

    2023-11-06 16:32:38
  • 给C语言初学者的学习建议

    2023-06-14 17:23:44
  • Spring Boot 异步框架的使用详解

    2022-11-14 23:10:38
  • 详解SpringMVC和MyBatis框架开发环境搭建和简单实用

    2022-03-11 13:54:51
  • Jenkins的安装配置详解

    2023-08-27 11:31:42
  • 基于SpringBoot核心原理(自动配置、事件驱动、Condition)

    2023-08-23 01:46:31
  • Android开发笔记之:一分钟学会使用Logcat调试程序的详解

    2022-07-19 05:17:22
  • C#逐行读取文件的方法

    2023-05-16 23:53:02
  • 解读Spring-Context的作用及用法

    2023-09-27 06:45:02
  • Android输入框实时模糊搜索效果的示例代码

    2022-09-17 02:12:10
  • java序列化和java反序列化示例

    2023-11-24 04:01:03
  • JDK14新特性之switch表达式的实现

    2022-06-01 17:49:31
  • C#打印日志的方法总结

    2022-02-08 22:32:00
  • C# CheckedListBox控件的用法总结

    2023-09-17 13:23:34
  • SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    2023-11-24 05:20:33
  • Unity实现倒计时组件

    2021-06-18 01:06:44
  • Android 自定义View之边缘凹凸的优惠券效果的开发过程

    2021-12-30 07:25:10
  • asp之家 软件编程 m.aspxhome.com