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日

相关文章

  • Android实现上传文件功能的方法

    Android实现上传文件功能的方法主要有两种:使用HttpURLConnection或使用OkHttp库。 使用HttpURLConnection上传文件 步骤一:添加网络权限 在AndroidManifest.xml文件中添加以下权限: <uses-permission android:name="android.permission.I…

    Java 2023年6月15日
    00
  • Java Properties作为集合三个方法详解

    当我们使用Java进行编程时,经常需要使用配置文件来存储一些关键的配置信息,于是Java提供了一个名为Properties的类来处理这个问题。Properties是一个Map集合,其中的key和value都必须是字符串类型。下面将详细讲解Java Properties作为集合的三个常用方法:getProperty、setProperty和load。 getP…

    Java 2023年6月15日
    00
  • 浅谈抛出异常和捕获异常的一些区别

    当我们编写程序时,经常需要处理一些错误或异常。其中,抛出异常和捕获异常是最常见的两种处理方式。 抛出异常 抛出异常是指在程序执行过程中,遇到错误或异常情况,程序会主动抛出一个异常对象,告诉上层调用者当前的问题。抛出异常可以使用throw关键字,抛出的异常对象必须是Java中的Throwable及其子类。例如: public void divide(int x…

    Java 2023年5月27日
    00
  • spring boot教程之全局处理异常封装

    Spring Boot教程之全局处理异常封装 在Spring Boot应用程序中,我们经常需要处理各种异常,例如数据库异常、网络异常、业务异常等。为了提高代码的可读性和可维护性,我们可以使用全局异常处理机制来封装和处理异常。本文将详细讲解Spring Boot全局处理异常封装的完整攻略,并提供两个示例。 1. 全局异常处理机制 以下是全局异常处理机制的基本流…

    Java 2023年5月15日
    00
  • 教你利用SpringBoot写一个属于自己的Starter

    教你利用SpringBoot写一个属于自己的Starter Spring Boot Starter是一种用于简化Spring应用程序配置的机制。它可以将一组相关的依赖项打包到一个单独的模块中,并提供自动配置和其他功能。本文将详细介绍如何编写一个属于自己的Spring Boot Starter,并提供两个示例。 创建Starter项目 首先,我们需要创建一个M…

    Java 2023年5月15日
    00
  • JSP 中request与response的用法详解

    标题:JSP 中request与response的用法详解 简介:本文将详细讲解 JSP 中 request 与 response 对象的用法,包括获取参数、响应请求等操作,以及使用两个示例演示如何使用这些对象。 获取参数 在 JSP 中,获取页面提交的参数是非常常见的操作。在处理页面提交时,可以使用 request 对象来获取参数。以下是一个简单的示例: …

    Java 2023年6月15日
    00
  • SpringBoot静态资源css,js,img配置方案

    下面我将为你详细讲解如何在Spring Boot中配置静态资源,即css、js和img文件。 一、默认静态资源位置 Spring Boot中默认情况下会自动加载如下两个目录下的静态资源: /static /public /resources /META-INF/resources 其中,/static和/public目录下的静态资源会直接映射到根路径下。例如…

    Java 2023年5月19日
    00
  • java实现jdbc查询结果集result转换成对应list集合

    将查询结果集result转换成对应的list集合是Java应用程序开发中经常需要实现的任务之一。下面是具体的步骤: 1. 引入相关的依赖 如果你使用的是Maven项目,需要在pom.xml文件中引入相关依赖。例如,引入mysql-connector-java驱动程序,可以添加以下依赖: <dependency> <groupId>my…

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