Spring多线程通过@Scheduled实现定时任务

下面就来详细讲解“Spring多线程通过@Scheduled实现定时任务”的完整攻略。

什么是@Scheduled

@Scheduled 是一种方便的 Spring 内置注解,可以让你在应用程序中创建定时任务。使用@Scheduled 注解,你可以指定一个固定的延迟、一个固定的间隔(以秒为单位)或一个 cron 表达式(更完整的定时任务调度方法)来触发注解的方法。

如何使用@Scheduled实现定时任务

使用 @Scheduled 实现定时任务有两种方法:

  1. 基于方法级别的定时任务
  2. 基于注解方式的定时任务

基于方法级别的定时任务

方法级别的定时任务需要将 @Scheduled 注解应用于需要定时执行的方法上。其语法格式如下:

@Scheduled(fixedDelay = 5000)
public void doSomething() {
    // 定时执行的任务代码
}

这里我们以一个定时输出当前时间的例子进行说明:

@Component
public class SchedulerTask {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    /**
     * 间隔5秒钟执行
     */
    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

在上述代码中,我们使用 @Scheduled(fixedRate = 5000) 注解来指定每隔 5 秒钟执行一次 reportCurrentTime() 方法,并输出当前的时间。

基于注解方式的定时任务

基于注解方式的定时任务需要在配置类中配置 @EnableScheduling 注解开启定时任务调度特性,并在需要定时执行任务的方法使用 @Scheduled 注解进行定时配置。其语法格式如下:

@Configuration
@EnableScheduling
public class SchedulerConfig {

    @Scheduled(cron = "*/5 * * * * ?")
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

这里我们以一个每 5 秒钟输出当前时间的例子进行说明:

在核心配置类上标注 @EnableScheduling 注解来启用计划任务,然后在需要计划运行的方法上指定 cron 表达式来配置任务的调度计划。

两条实例说明

示例一

@Component
public class SchedulerTask {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    /**
     * 每 minute 执行一次
     */
    @Scheduled(cron = "0 * * * * ?")
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

这个定时任务的点用的是 cron 表达式 0 * * * * ?,即每分钟执行一次。执行结果如下所示:

现在时间:15:01:00
现在时间:15:02:00
现在时间:15:03:00

示例二

@Configuration
@EnableScheduling
public class SchedulerConfig {

    @Scheduled(fixedDelayString = "PT10S")
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

这个定时任务通过 fixedDelayString 属性间隔 10 秒钟执行一次,并输出当前时间。执行结果如下所示:

现在时间:15:25:50
现在时间:15:26:00
现在时间:15:26:10

总结

通过以上两个示例,我们可以看出如何通过 Spring 多线程来实现定时任务的。大致步骤包括:

  1. 创建一个 Spring Boot 应用
  2. 激活多线程模式,添加相关依赖
  3. 配置定时任务参数
  4. 编写定时任务代码
  5. 运行定时任务

通过实践,我们可以更好地掌握如何使用 Spring 多线程通过 @Scheduled 注解实现定时任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring多线程通过@Scheduled实现定时任务 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 实例分析Java中public static void main(String args[])是什么意思

    下面我会为您提供详细的攻略: 1.关于主方法 在Java中,main方法是一个程序的入口,是Java程序启动时由JVM调用的第一个方法。Java中有许多类,每个类中都可以定义main方法。当程序启动时,JVM会查找该类中是否有main方法,如果有,JVM会执行main方法。 2.public static void main(String[] args)的含…

    Java 2023年5月26日
    00
  • Java解析xml文件和json转换的方法(DOM4j解析)

    Java解析XML文件和JSON转换的方法(DOM4j解析) 在Java编程中,经常需要解析XML文件或者将JSON字符串转换成Java对象。针对这个问题,我们可以使用DOM4j解析库来处理。下面是详细的使用方法: 解析XML文件 引入依赖库 首先,需要在项目中引入dom4j和jaxen这两个依赖库。在Maven项目中,可以在项目的pom.xml文件中添加以…

    Java 2023年5月26日
    00
  • Java的Struts框架报错“NoSuchRequestHandlingMethodException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NoSuchRequestHandlingMethodException”错误。这个错误通常由以下原因之一起: 方法名称错误:如果方法名称不正确,则可能出现此。在这种情况下,需要检查方法名称以解决此问题。 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查配置以解决此问题。 以下是两个…

    Java 2023年5月5日
    00
  • Spring boot中Jackson的操作指南

    下面就是关于Spring Boot中Jackson操作的指南详解。 什么是Jackson Jackson是Java应用程序中最常用的JSON处理库之一,它可以将Java对象转换为JSON格式,也能将JSON反序列化为Java对象。 如何在Spring Boot中使用Jackson 在Spring Boot中使用Jackson非常简单。Spring Boot的…

    Java 2023年5月26日
    00
  • java实现把两个有序数组合并到一个数组的实例

    下面是Java实现把两个有序数组合并到一个数组的完整攻略。 1. 题目说明 有两个已排序的整数数组nums1和nums2,将nums2合并到nums1中,使得nums1成为一个有序数组。 注意: nums1和nums2的初始元素数量分别为m和n。 nums1的长度足以容纳m+n个元素。 2. 思路分析 根据题目要求,我们需要将nums2中的所有元素按顺序插入…

    Java 2023年5月26日
    00
  • java数据库连接池的特点及步骤

    Java数据库连接池是Java web开发中常用的工具之一,下面按照以下步骤来详细讲解Java数据库连接池的使用: 步骤一:导入数据库连接池相关依赖 首先需要在项目中导入数据库连接池相关的依赖,比如Apache Tomcat、C3P0、Druid等等保证正在使用的数据库连接工具导入正确的驱动包。 步骤二:配置连接池参数属性 在Java代码中配置连接池的参数属…

    Java 2023年5月20日
    00
  • 详解kotlin中::双冒号的使用

    详解kotlin中::双冒号的使用 在Kotlin中,双冒号::是一个重要的语法符号,它可以表示一些函数和属性的引用。双冒号有以下用法: 1. 表示函数引用 可以使用::符号来表示一个函数的引用,例如: fun plus(a: Int, b: Int): Int = a + b val functionRef = ::plus 在上面的代码中,functio…

    Java 2023年5月26日
    00
  • Springboot WebFlux集成Spring Security实现JWT认证的示例

    下面是关于“Springboot WebFlux集成Spring Security实现JWT认证的示例”的完整攻略。 一、简介 在开始之前,先简单介绍一下SpringBoot和SpringSecurity。 SpringBoot:是Spring官方提供的一个快速开发框架,它能够极大地简化项目的搭建和配置,提高开发效率。 SpringSecurity:是Spr…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部