详解SpringBoot开发案例之整合定时任务(Scheduled)

下面就是详解SpringBoot开发案例之整合定时任务(Scheduled)的完整攻略。

一、前言

在我们的日常开发中,经常会有需要在指定的时间执行某些任务的需求。比如说定期产生统计报表、备份数据、扫描无效文件等等。在Java开发中,我们可以使用Java自带的Timer/TimerTask类或是Quartz等第三方框架实现定时执行任务。在Spring Boot中,使用定时任务非常简单,可以利用Spring自带的@Scheduled注解来实现。

二、整合定时任务(Scheduled)的操作步骤

1、创建Spring Boot项目

如果你还没有创建Spring Boot项目,可以参考以下操作:

  1. 在IDE中选择File -> New -> Project -> Spring Initializr。选择一个Maven/Gradle项目,填写名称、GroupId、ArtifactId等信息。

  2. 选择需要引入的依赖,这里我们需要勾选Spring Web和Spring Task依赖。

  3. 点击Finish,等待项目创建完成。

2、创建定时任务的方法

在Spring Boot中创建定时任务非常简单,只需要在方法上添加@Scheduled注解并设置相应的属性即可。

下面是这个注解的几个属性的含义:

  • cron:cron表达式,指定任务执行时间。

  • fixedDelay:按固定延迟时间执行任务,单位毫秒。

  • fixedDelayString:同fixedDelay,只是使用字符串形式。

  • fixedRate:按固定的频率执行任务,单位毫秒。

  • fixedRateString:同fixedRate,只是使用字符串形式。

  • initialDelay:初始延迟时间,单位毫秒。

  • initialDelayString:同initialDelay,只是使用字符串形式。

下面是一个简单的例子:

@Component
public class ScheduledTask {

    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Scheduled(fixedDelay = 5000)
    public void reportCurrentTime() {
        System.out.println("现在时间是:" + sdf.format(new Date()));
    }
}

上面的例子中,我们通过使用@Scheduled(fixedDelay = 5000)注解,每5秒钟输出一次当前时间。

3、测试定时任务的效果

我们可以使用Spring Boot自带的TaskExecutor和TaskScheduler对任务进行并发控制,TaskScheduler在执行任务时还可以支持断线重连和容错处理。

下面是一个简单的测试例子:

@RestController
public class TestController {

    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Autowired
    private AsyncRestTemplate asyncRestTemplate;

    @GetMapping("/test")
    public String test() throws InterruptedException, ExecutionException {

        ScheduledExecutorService executorService1 = Executors.newScheduledThreadPool(5);

        // 测试单次定时任务
        executorService1.schedule(() -> {
            System.out.println("single execution: " + sdf.format(new Date()));
        }, 5, TimeUnit.SECONDS);

        ScheduledExecutorService executorService2 = Executors.newScheduledThreadPool(5);

        // 测试间隔定时任务
        executorService2.scheduleAtFixedRate(() -> {
            System.out.println("fixed rate execution: " + sdf.format(new Date()));
        }, 2, 5, TimeUnit.SECONDS);

        ScheduledExecutorService executorService3 = Executors.newScheduledThreadPool(5);

        // 测试延时定时任务
        executorService3.scheduleWithFixedDelay(() -> {
            System.out.println("fixed delay execution: " + sdf.format(new Date()));
        }, 2, 5, TimeUnit.SECONDS);

        return "OK";
    }
}

上述测试例子中,我们使用了Spring Boot自带的TaskExecutor和TaskScheduler来测试我们的定时任务。

示例中的第一个定时任务是单次定时执行任务,第二个是间隔定时任务,第三个是延时定时任务。

三、结语

上面就是详解SpringBoot开发案例之整合定时任务(Scheduled)的完整攻略。本文介绍了定时任务的基本实现原理、创建定时任务的方法、测试定时任务的效果等内容。希望可以帮助大家在开发中更好的应用定时任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringBoot开发案例之整合定时任务(Scheduled) - Python技术站

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

相关文章

  • 详解python Todo清单实战

    详解python Todo清单实战 简介 本篇攻略将要介绍如何用Python语言实现一个Todo清单,通过实战演示不同功能模块的编写过程,帮助读者熟悉Python语言的基础知识和实践能力。 环境搭建 首先,需要保证电脑上已经安装Python3版本。如果没有安装,可以按照官网的指引进行安装。 安装好Python3后,需要安装两个Python包来完成我们的实战:…

    人工智能概览 2023年5月25日
    00
  • 快速搭建Node.js(Express)用户注册、登录以及授权的方法

    下面是详细讲解如何快速搭建Node.js(Express)用户注册、登录以及授权的方法的攻略,包含以下内容: 环境准备 安装Express和必要插件 用户注册与登录功能实现 授权功能实现 1. 环境准备 在开始搭建之前,需要准备好Node.js环境和编辑器,推荐使用最新版Node.js和Visual Studio Code编辑器。 2. 安装Express和…

    人工智能概论 2023年5月24日
    00
  • Vue生命周期与后端交互实现流程详解

    下面是关于“Vue生命周期与后端交互实现流程详解”的完整攻略。 Vue生命周期与后端交互实现流程详解 在使用Vue开发项目时,经常需要与后端交互获取数据。Vue组件的生命周期是与页面渲染、更新、销毁相关的一系列方法,这些方法的执行可以帮助我们更好地实现前后端交互。下面将详细讲解Vue生命周期与后端交互的实现流程。 1. 创建Vue组件并发起数据请求 在Vue…

    人工智能概论 2023年5月25日
    00
  • 关于Linux搭建RabbitMQ集群环境图文详解

    关于Linux搭建RabbitMQ集群环境图文详解 引言 RabbitMQ 是一个开源的消息中间件,广泛应用于分布式系统中。在实际应用场景中,我们往往需要通过搭建 RabbitMQ 集群来提高可用性和性能。本文将详细介绍如何在 Linux 系统上搭建 RabbitMQ 集群环境。 准备工作 在开始搭建 RabbitMQ 集群之前,需要做好以下准备工作: 安装…

    人工智能概览 2023年5月25日
    00
  • Python爬虫中urllib库的进阶学习

    接下来我将详细讲解一下“Python爬虫中urllib库的进阶学习”的完整攻略。 1. 前言 在Python爬虫的过程中,我们经常会用到urllib库来处理网络请求。虽然urllib库已经可以满足大多数基本的网络请求操作,但是对于一些高级的操作和处理需求,我们还需要进一步深入学习urllib库,掌握更多高级技巧。 2. urllib库简介 urllib是Py…

    人工智能概论 2023年5月25日
    00
  • OpenCV实现特征检测和特征匹配方法汇总

    OpenCV实现特征检测和特征匹配方法汇总 本文将介绍使用OpenCV实现特征检测和特征匹配的方法汇总。 特征检测 特征检测是基于图像对应的变化来寻找图像中的关键点的过程,这些关键点可以用来描述图像。OpenCV支持几种特征检测算法,包括:Harris Corner Detection、Shi-Tomasi Corner Detection、SIFT、SUR…

    人工智能概论 2023年5月25日
    00
  • OpenStack之虚机热迁移的代码详细解析

    OpenStack之虚机热迁移的代码详细解析 前言 OpenStack是一种可以用于构建私有云或公共云的开源软件平台。它通过各种不同的组件提供了丰富的云计算功能,其中之一便是虚机热迁移。 本文将探讨OpenStack中实现虚机热迁移的相关代码实现。 背景 虚机热迁移是指在虚拟化环境下,运行中的虚机不停机状态下无缝迁移至另一个主机,从而实现资源的动态负载均衡和…

    人工智能概论 2023年5月25日
    00
  • Python2实现的图片文本识别功能详解

    Python2实现的图片文本识别功能详解 简介 文本识别是计算机视觉领域的热门应用之一,可以将图片中的文字转化为可编辑的文本格式。在Python2中,有很多开源的库和工具可以实现图片文本识别的功能。本文将详细介绍如何使用Python2实现图片文本识别功能,并以两个示例说明其具体过程。 步骤 1. 安装依赖库 在实现图片文本识别之前,需要先安装相关的依赖库。其…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部