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日

相关文章

  • Win10禁用服务后如何重启?Win10重启禁用服务的方法

    Win10禁用服务后如何重启?Win10重启禁用服务的方法 在Win10中,我们可以通过禁用系统服务来提高性能或节省系统资源。但有时候当我们禁用一些必要的服务时,可能会出现一些问题,此时我们需要重新启用相应的服务来解决问题。下面是Win10禁用服务后如何重启以及Win10重启禁用服务的方法。 1. Win10禁用服务后如何重启? 如果您禁用了某个服务,但现在…

    other 2023年6月27日
    00
  • 带你了解C++的数组与函数

    当我们编写C++程序时,数组和函数是两个非常重要的主题。这篇文章会带你深入了解C++中的数组和函数。我们将从以下几个方面展开对这两个主题的讲解: 什么是数组?为什么使用数组? 如何声明和使用数组? 数组的常见操作-访问、修改、遍历和排序 什么是函数?为什么使用函数? 如何声明和使用函数? 两个示例说明 什么是数组?为什么使用数组? 数组是一组具有相同数据类型…

    other 2023年6月25日
    00
  • VS2010/MFC编程(常用控件:树形控件Tree Control控件创建h和实例)

    VS2010/MFC编程(常用控件:树形控件Tree Control控件创建h和实例) 树形控件简介 树形控件(Tree Control)是一种常用的控件,用于呈现树形数据结构。树形控件通常以树的形式呈现数据,每个节点可以有多个子节点,在视图上以缩进形式进行展示。树形控件可以用于很多场景,例如展示文件夹目录、组织结构等等。 树形控件创建步骤 以下是树形控件的…

    other 2023年6月27日
    00
  • 手把手教你从git上导入项目

    手把手教你从Git上导入项目 如果你想将代码存储到Git上进行管理或者与他人合作开发项目,那么你需要了解如何从Git上导入项目。在这个过程中,你需要掌握以下基本操作: 在Git上创建并配置仓库 克隆仓库到本地 添加和提交代码 推送本地更改到Git仓库 接下来我们一起具体了解如何完成这些操作。 在Git上创建并配置仓库 首先,在Git上创建一个新仓库。登录到G…

    其他 2023年3月29日
    00
  • 详解Java中的三种流程控制语句

    详解Java中的三种流程控制语句 在Java中,有三种主要的流程控制语句,它们分别是:顺序结构、选择结构和循环结构。下面将详细讲解这三种流程控制语句,并提供示例说明。 1. 顺序结构 顺序结构是程序中最简单的流程控制语句,它按照代码的书写顺序依次执行每一条语句。没有任何条件或循环,代码会按照从上到下的顺序依次执行。 示例代码: public class Se…

    other 2023年7月28日
    00
  • Java零基础也看得懂的单例模式与final及抽象类和接口详解

    Java零基础也看得懂的单例模式 什么是单例模式? 在设计模式中,单例模式是一种经典的、创建型的设计模式,其目的是确保一个类仅有一个实例,并提供一个全局访问点。 为什么需要单例模式? 在某些情况下,我们需要确保一个类仅有一个实例,例如数据库连接池、线程池等。如果我们每次使用时都创建一个新的对象,那么会很浪费资源,因为每个对象在JVM中都有一定的内存消耗,加之…

    other 2023年6月27日
    00
  • 暗黑3魔法师巅峰怎么加点 魔法师巅峰加点属性优先级

    下面简要介绍一下关于“暗黑3魔法师巅峰怎么加点 魔法师巅峰加点属性优先级”的攻略: 暗黑3魔法师巅峰加点方式 第一步:懂得一些巅峰基础知识 在进行巅峰加点前,我们需要先了解到什么是“巅峰系统”。巅峰系统是50级以后的一个系统,可以提供魔法师更多的属性加成和技能点,使魔法师更加强大。在巅峰系统中,我们需要将点数投入到巅峰技能中,常见的巅峰技能有以下几种: 巨型…

    other 2023年6月27日
    00
  • css:root选择器

    CSS :root选择器 在CSS中,:root选择器用于选择文档根元素,即HTML文档中的<html>元素。通过使用:root选择器,我们可以方便地定义全局的CSS变量,以便在整个页面中进行使用。 如何使用:root选择器 下面是一个例子,演示如何创建一个全局的CSS变量: :root { –my-color: #ff0000; } 在上面的…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部