springboot整合@scheduled定时任务的使用-从精通到陌生…

SpringBoot整合@Scheduled定时任务的使用-从精通到陌生...

SpringBoot的定时任务是非常常用的功能,而@Scheduled注解则是SpringBoot实现定时任务最常用的一种方式。本文将从以下几个方面详细讲解SpringBoot整合@Scheduled定时任务的使用,帮助读者逐渐掌握使用到陌生的整个过程。

一、@Scheduled注解的基本使用

@Scheduled注解基本用法如下:

@Scheduled(cron = "*/5 * * * * *")
public void test(){
    System.out.println("hello world");
}

执行结果为每5秒输出一次"hello world"字符串。
其中cron参数为定时任务执行的时间表达式,常用的表达式格式如下:

"0 0 12 * * ?"    // 每天12点触发任务
"0 */1 * * * ?"   // 每分钟执行一次任务

二、@Scheduled注解的参数详解

@Scheduled注解的参数也是很多的,下面我们来逐个讲解。

1.fixedDelay和fixedRate参数

  • fixedDelay:任务间隔固定时间执行,比如间隔5秒执行。
  • fixedRate:任务间隔固定时间执行,比如2秒执行一次任务,不论任务花费多久时间。
@Scheduled(fixedDelay = 5000)   // 每隔5秒执行一次
public void testFixedDelay(){
    System.out.println("fixedDelay:" + System.currentTimeMillis());
}

@Scheduled(fixedRate = 2000)    // 每隔2秒执行一次
public void testFixedRate(){
    System.out.println("fixedRate:" + System.currentTimeMillis());
}

2.initialDelay参数

initialDelay表示初始化后延迟多久才开始执行定时任务,单位为毫秒。比如下面这个代码表示启动后延迟2秒后执行定时任务。

@Scheduled(initialDelay = 2000, fixedDelay = 5000)
public void testInitialDelay(){
    System.out.println("initialDelay:" + System.currentTimeMillis());
}

3.cron参数

cron参数是一个很灵活的参数,可以表示非常复杂的定时任务执行方式。下面是cron表达式的最常用写法:

"0 0 12 * * ?"    // 每天12点触发任务
"0 */1 * * * ?"   // 每分钟执行一次任务

上面这两个cron表达式都是非常常用的写法,下面我们再来看一个稍微复杂一点的示例,表示每月最后一个工作日的15点执行任务。

@Scheduled(cron = "0 0 15 ? * L")
public void testCron(){
    System.out.println("testCron:" + System.currentTimeMillis());
}

4.zone参数

zone参数表示时区,可以覆盖Spring的默认时区。比如下面这个任务在北京时间晚上10点执行:

@Scheduled(cron = "0 0 22 * * ?", zone = "Asia/Shanghai")
public void testZone(){
    System.out.println("testZone:" + System.currentTimeMillis());
}

三、@Scheduled注解注意事项

使用@Scheduled注解需要注意以下几点:

  1. 任务方法的返回值必须为void类型,不能有参数。
  2. 任务方法需为公有方法,不能为私有方法。
  3. 任务方法的执行时间必须小于间隔时间,否则可能出现多线程同时执行的情况。
  4. 如果@Scheduled注解作用在类上,则该类的方法都将被执行。

四、定时任务的异步执行

默认情况下,定时任务是同步执行的,执行时间较长可能会阻塞其他任务的执行。可以通过@EnableAsync注解启用异步执行任务,将任务执行放入线程池中,从而实现异步执行。

@Configuration
@EnableAsync
@Scheduled(cron = "*/5 * * * * *")
public class DemoTask {

    @Async
    public void testAsync(){
        System.out.println("async task execute successful");
    }
}

五、结语

本文通过详细讲解@Scheduled注解的基本使用和参数详解,以及注意事项和异步执行等方面,希望读者可以逐渐掌握使用到陌生的整个过程。定时任务虽然看似简单,但是在开发中用到的地方还是很多的,希望读者可以多加实践,熟能生巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot整合@scheduled定时任务的使用-从精通到陌生… - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • iPhone快速添加网址URL后缀技巧不需要一个一个的去输入

    iPhone快速添加网址URL后缀技巧攻略 在iPhone上,我们可以使用一些技巧来快速添加网址URL后缀,而不需要一个一个地输入。下面是一个完整的攻略,包含两个示例说明。 使用“.”快速添加.com后缀 打开Safari浏览器并进入网址输入栏。 输入网址的主体部分,例如 \”www.example\”。 在键盘上长按“.”键,会弹出一个快捷菜单。 在快捷菜…

    other 2023年8月5日
    00
  • linux rsync安装 配置 实例详解

    Linux Rsync安装 配置 完整攻略 Rsync(Remote Sync)能够让你的文件同步工作变得更简单,是一个高效的数据同步工具。本文将介绍Linux系统中Rsync的安装和配置方法。 1. 安装Rsync Rsync在大多数Linux发行版中都已经预装,如果没有安装,则可以通过以下命令来安装rsync: # Debian/Ubuntu sudo …

    other 2023年6月25日
    00
  • Bootstrap布局之栅格系统学习笔记

    Bootstrap布局之栅格系统学习笔记 什么是栅格系统? 栅格系统是Bootstrap框架中的一个重要组成部分,用于创建响应式的网页布局。它将页面水平划分为12个等宽的列,开发者可以根据需要将内容放置在这些列中,从而实现灵活的布局。 栅格系统的基本结构 栅格系统由行(row)和列(column)组成。行用于包含列,而列则用于放置内容。以下是栅格系统的基本结…

    other 2023年7月28日
    00
  • Java中获得当前静态类的类名

    Java中获得当前静态类的类名 在编写Java代码时,有时需要获取当前静态类的类名,比如说打印日志时需要输出当前类的名称。那么在Java中如何获得当前静态类的类名呢? 方式一:使用getClass()方法 可以通过Java中Object类的getClass()方法来获取当前类的Class对象,然后再使用Class对象的getName()方法来获取当前类的类名…

    其他 2023年3月28日
    00
  • 逆转交替合并两个链表的解析与实现

    逆转交替合并两个链表是一种常见的链表操作,该操作的意义在于将两个链表中的节点按照交替顺序进行组合,并将最终的结果链表逆序排列。下面是逆转交替合并两个链表的解析与实现的详细攻略: 解析 假设我们要对以下两个链表进行逆转交替合并: 链表1:1 -> 2 -> 3 -> 4 -> NULL链表2:5 -> 6 -> 7 -&gt…

    other 2023年6月27日
    00
  • JavaScript中数组的各种操作的总结(必看篇)

    JavaScript中数组的各种操作的总结 在JavaScript中,数组是一种非常常见的数据类型。本文将总结一些常见的数组操作。 定义一个数组 可以使用两种方式来定义一个数组。 第一种方法是使用方括号 []: let arr1 = []; // 声明一个空数组 let arr2 = [1, 2, 3]; // 声明一个3个元素的数组,包含数字1,2,3 l…

    other 2023年6月25日
    00
  • vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决

    下面是详细讲解“vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决”的完整攻略。 1. 修改打包后的文件名和地址 1.1 修改文件名 使用 vue-cli 3.0 打包生成的文件名是自动化的,会根据默认的模板来命名,比如 js/chunk-vendors.f8bb20ba.js,如果想要修改这些文件的名字,可以通过配置 output 来…

    other 2023年6月26日
    00
  • HTML转PDF的纯客户端和纯服务端实现方案

    实现HTML转PDF有两种方案:纯客户端方案和纯服务端方案。 纯客户端方案 纯客户端方案是指在前端页面上使用JavaScript将HTML转换为PDF,实现方式主要有以下两种。 使用jsPDF库 jsPDF是一个流行的用于生成PDF的JavaScript库,它可以直接在浏览器中生成PDF文档。使用jsPDF库,需要先在HTML中引入以下两个文件: <s…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部