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

yizhihongxing

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日

相关文章

  • C语言基础文件操作方式超全详解建议收藏

    C语言基础文件操作方式超全详解建议收藏 为什么要学习文件操作 在编程中,文件操作是一种比较常见的操作方法。在实际项目中,我们需要与电脑中文件进行交互,比如将一些重要的数据存储到文件中,或者从文件中读取数据作为程序的输入。如果我们没有学会文件操作,那么我们就无法进行这类数据持久化的操作,这会严重影响我们的编程效率和开发质量。因此,学会C语言基础文件操作是非常重…

    other 2023年6月26日
    00
  • JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)

    以下是我为你准备的完整攻略,希望能对你有所帮助。 什么是图片懒加载? 在网页开发中,图片懒加载指的是在页面加载完成后,不会立即加载所有图片资源,而是只加载那些用户正在访问或即将需要的图片资源,从而提高页面的加载速度和用户体验。 实现原理 图片懒加载的实现原理主要是通过JavaScript控制图片的加载行为,比如:设置图片的data-src属性,使用Inter…

    other 2023年6月25日
    00
  • 假设检验(hypothesistesting)

    假设检验(hypothesis testing) 在统计学中,假设检验(hypothesis testing)是一种用来检验、评估某个假设是否成立的方法。在假设检验中,我们会建立一个零假设(null hypothesis),然后寻找足够的证据来判断是否需要拒绝这个假设。 零假设(null hypothesis)和备择假设(alternative hypoth…

    其他 2023年3月28日
    00
  • Android布局——Preference自定义layout的方法

    Android布局——Preference自定义layout的方法 在Android应用开发中,Preference是相当常见的一个组件,通过Preference可以快捷地实现应用的一些常用设置。Preference提供了一些默认的布局,但是有时候我们需要自定义布局来满足特定的需求。下面是Preference自定义layout的方法。 1. 创建自定义lay…

    other 2023年6月25日
    00
  • python中print()函数不换行的方法

    Python中print()函数不换行的方法 在Python中,print()函数是一个常用的输出函数。默认情况下,每次调用print()函数都会自动在输出内容的最后加上一个换行符,使得不同的输出内容分隔开来,排版更加美观。但有时候,我们需要输出一些不同行的内容,这时就需要禁止print()函数自动换行。那么,Python中如何实现不换行输出呢? 方法一:使…

    其他 2023年3月28日
    00
  • cd是什么意思?

    cd是Linux/Unix操作系统中的命令,用于切换当前工作目录。其中,cd是“change directory”的缩写。 使用cd命令可以快速进入其它文件夹,而无需输入文件路径的完整名称。 示例1:进入目录 假设我们初始的工作目录是/home/user/,现在需要进入/home/user/documents这个文件夹,可以在命令行输入以下命令: cd ~/…

    其他 2023年4月16日
    00
  • 初识C++ Vector模板与实例化原理

    初识C++ Vector模板与实例化原理 什么是Vector模板 Vector是C++ STL库提供的一种数据结构,是动态数组的一个实现。它可以在运行时动态调整容器大小,并且可以快速随机访问元素。 在C++里,vector是一个模板类,可以存储任意类型的元素。 vector模板的实例化 Vector是一个模板,需要在使用前被实例化,并且实例化时需要指定数据类…

    other 2023年6月26日
    00
  • 详解vue-router 初始化时做了什么

    Vue Router 是 Vue.js 官方的路由管理器,它能够实现单页面应用程序(SPA)中的路由效果。Vue Router 初始化时做了以下事情: 创建路由实例 在 Vue 应用中使用 Vue Router,我们需要创建一个路由实例来管理路由。在创建路由实例时,Vue Router 会进行一系列的初始化操作,包括初始化路由表、路由守卫等。 import …

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