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环境切换失效概述最近在使用-Dspring.profiles.active=te 来切换spring-boot的环境时,
- 在ajaxcontroltoolkit-a2a6dc6854e0\Client\MicrosoftAjax.Extended\Extende
- 问题现象今天在做一个需求:将存入数据库中的数据读到后解析成list遍历分析数据格式:"[1677660600000, 167766
- java 实现文件夹的拷贝实例代码 这里就直接上代码,
- C# 输出参数out什么是输出参数方法声明时,使用out修饰符声明的形参,成为输出参数。输出参数的特点1、输出参数不创建新的储存位置。2、输
- 本文实例讲述了Java删除二叉搜索树的任意元素的方法。分享给大家供大家参考,具体如下:一.删除思路分析在删除二叉搜索树的任意元素时,会有三种
- mybatis项目CRUD步骤1.pom.xml引入相应的依赖<?xml version="1.0" encodi
- 概述SpringMVC的处理器 * 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦
- 目录一.什么是负载均衡二.负载均衡的简单分类三.为什么需要做负载均衡四.springCloud如何开启负载均衡五.IRule1.Random
- 为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 Output
- 前言刚看到这个题目的朋友第一反应肯定是好奇,之后再细细思考下就会发现这个题目眼熟了。就算是同一个答案,如果提问的方式不同,往往会对回答造成干
- 前言Java 传承的是平台,而不是语言。有超过 200 种语言可以在 JVM 上运行,它们之中不可避免地会有一种语言最终将取代 Java 语
- private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAd
- 目录设置应用的名称,包名、应用图标和启动替换应用图标替换启动页设置访问权限配置版本发布参数生成应用签名修改配置文件打包注意事项设置应用的名称
- 本文实例为大家分享了Android中TabLayout结合ViewPager实现页面切换,供大家参考,具体内容如下一、实现思路1、在buil
- 前言我们之前学的单链表,默认只能从链表的头部遍历到链表的尾部,在实际中应用太少见,太局限;而双向链表,对于该链表中的任意节点,既可以通过该节
- 题目要求思路一:双指针(模拟)Javaclass Solution { public boolean isFlip
- c# 轮询算法这两天做东西,业务上有个特殊的需求,在用户访问页面的时候,针对某一行代码进行控制,按照概率来进行显示,我做的是针对当前页面的曝
- 内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,就像操作进程空间里的地址一样了,比如使用c语言的 memcp
- 今天上课老师用Java实现了打地鼠游戏的界面和具体逻辑,那么我也尝试使用Android语言实现其功能。首先是打地鼠游戏的玩法1.每隔1秒或者