在 Spring Boot 中实现定时任务,通过 Spring Task Scheduling 来完成

Spring Boot 中实现定时任务,可以通过 Spring Task Scheduling 来轻松完成。Spring 提供了多种方法来调度任务,其中使用 @Scheduled 注解是最常见且简单的方式。

步骤:在 Spring Boot 中实现定时任务

1. 启用定时任务

首先,确保在 Spring Boot 应用的主类或配置类中启用定时任务功能:

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableScheduling  // 启用定时任务
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2. 创建定时任务

使用 @Scheduled 注解来定义定时任务。在类中编写一个方法并使用 @Scheduled 注解,指定任务的执行频率。

2.1 使用固定频率执行

例如,每隔 5 秒执行一次任务:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTask {

    @Scheduled(fixedRate = 5000)  // 每隔 5 秒执行一次
    public void performTask() {
        System.out.println("执行定时任务: " + System.currentTimeMillis());
    }
}
2.2 使用固定延迟执行

如果希望任务在上一个任务结束后延迟一段时间再执行:

@Scheduled(fixedDelay = 5000)  // 上次执行完后延迟 5 秒
public void performDelayedTask() {
    System.out.println("执行定时任务: " + System.currentTimeMillis());
}
2.3 使用 Cron 表达式

Cron 表达式可以更加灵活地控制任务的执行时间。例如,每天凌晨 1 点执行任务:

@Scheduled(cron = "0 0 1 * * ?")  // 每天凌晨1点执行
public void performCronTask() {
    System.out.println("执行 Cron 定时任务:" + System.currentTimeMillis());
}

3. 配置线程池(可选)

为了避免多个任务同时执行时占用过多的资源,可以配置线程池来管理定时任务。

java复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

@Configuration
public class TaskSchedulerConfig {

    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(5);  // 设置线程池大小
        scheduler.setThreadNamePrefix("scheduled-task-");
        scheduler.setDaemon(true);  // 守护线程
        return scheduler;
    }
}

4. 配置任务执行日志(可选)

你可以使用 @Scheduled 注解的 zone 属性来指定执行任务时的时区,并利用日志记录任务执行的时间和状态。例如:

@Scheduled(cron = "0 0 1 * * ?", zone = "GMT+8")
public void logTaskExecution() {
    System.out.println("任务执行时间:" + System.currentTimeMillis());
}

5. 常见属性解释

  • fixedRate: 任务执行的间隔时间(单位:毫秒),任务开始时刻计算。
  • fixedDelay: 上一个任务完成后再延迟指定时间执行。
  • cron: 使用 Cron 表达式来指定任务的执行时间。Cron 表达式允许设置具体的执行时间(例如每天、每小时等)。
  • zone: 设置任务的时区,默认为系统时区。

通过以上步骤,你可以轻松在 Spring Boot 中实现定时任务。无论是简单的定时任务,还是复杂的 Cron 表达式调度,Spring Boot 都提供了灵活的方式来满足需求。如果有其他需求,例如异步执行任务或任务失败重试等,可以进一步扩展和配置。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4581

Like (0)
Previous 2024年11月26日 下午12:09
Next 2024年11月26日 下午12:16

相关推荐

  • 使用 CLion 编写 C51 (即8051微控制器) 程序时,遇到 sbit 相关报错

    在使用 CLion 编写 C51 (即8051微控制器) 程序时,遇到 sbit 相关报错,通常是因为 CLion 默认并不支持8051的特殊语法和寄存器定义方式。sbit 是 C51 编译器中的一个关键字,用来将一个单独的位(bit)映射到特定的硬件寄存器或端口引脚。常见的报错及解决方法sbit 语法问题: CLion 本身不支持 C51 特有的语法,sb…

    2024年11月27日
    00
  • JavaScript 前端开发:从入门到精通的方法

    JavaScript 是前端开发的核心语言,它与 HTML 和 CSS 一起构成了 Web 开发的基础。要从入门到精通 JavaScript 前端开发,需要系统化的学习方法和实践。以下是详细的方法和步骤。 1. 理解 JavaScript 的基础 1.1 学习基础语法 1.2 理解函数 箭头函数: 1.3 掌握 DOM 操作 修改内容: 监听事件: 1.4 …

    2024年11月22日
    00
  • java中使用 Arrays.asList()新增报错问题解决方法

    Arrays.asList() 返回的是一个固定大小的列表。如果你尝试使用该列表进行添加、删除等修改操作,会抛出 UnsupportedOperationException 异常。这是因为 Arrays.asList() 返回的列表背后是一个数组,它的大小是固定的,不能进行动态修改。解决方法使用 ArrayList 包装 Arrays.asList() 的结…

    2024年12月2日
    00
  • 在 Android 中 Matrix 实现图像的缩放和裁剪将 Glide 图像从 fitCenter 转换为 centerCrop

    在 Android 中,Matrix 可以用来实现图像的缩放和裁剪逻辑。要将 Glide 图像从 fitCenter 转换为 centerCrop,需要通过 Matrix 计算变换逻辑。以下是使用 Kotlin 实现的方法:实现步骤计算目标变换矩阵:根据目标宽高比,判断是否需要横向或纵向裁剪。设置 Matrix:使用 Matrix 执行缩放和平移操作。应用到…

    2024年12月3日
    00
  • 解决 WordPress 后台无法登录的常见问题

    WordPress 后台无法登录是一个常见问题,可能由多种原因引起,包括插件冲突、主题问题、数据库错误或用户账户问题。以下是详细的排查和解决步骤: 1. 检查登录页面 URL 确保您访问的是正确的 WordPress 登录页面: 2. 清除浏览器缓存和Cookie 3. 重置密码 用新密码尝试登录。 4. 禁用插件 某些插件可能会导致登录问题。尝试通过以下方…

    2024年12月9日
    00
  • 如何使用uni-app-qrcode插件生成二维码?

    以下是使用uni-app-qrcode插件生成二维码的详细步骤: 安装插件 或者使用yarn进行安装: 引入插件 使用插件生成二维码 上述代码中,首先定义了要编码到二维码中的内容content和生成二维码的配置选项options,然后通过this.$refs.qrcodeCanvas获取页面中的canvas元素,最后调用QRCode.make方法生成二维码。…

    2024年12月22日
    00
  • VMware Workstation 17 Pro 中安装 macOS 虚拟机

    在 VMware Workstation 17 Pro 中安装 macOS 虚拟机需要一些额外的步骤,因为 VMware 默认不支持直接安装 macOS 系统。以下是完整的教程,帮助你在 VMware 中成功安装 macOS。 一、准备工作 1. 所需资源 二、安装 VMware 并解锁 macOS 支持 1. 安装 VMware Workstation 2…

    2024年11月23日
    00
  • 解决 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误问题

    在将 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误通常是由于 GitHub Pages 处理路由时的问题。Vue 3 使用 Vue Router 来管理前端路由,而 GitHub Pages 本身是静态托管服务,不支持处理 SPA(单页面应用)的客户端路由。因此,当你直接访问某个页面 URL(比如 https://youruser…

    2024年11月29日
    00
  • 在使用 uni-app 开发小程序或移动端应用时 title image失效问题

    在使用 uni-app 开发小程序或移动端应用时,若发现 分享的标题(title) 和 图片(image) 配置无效,可能是由于配置错误、平台限制或代码逻辑问题。以下是排查和解决问题的详细指南: 1. 确保正确使用分享 API onShareAppMessage(自定义转发) 确保在 pages 的页面代码中正确使用了 onShareAppMessage 方…

    2024年11月25日
    00
  • Python 的 json模块序列化数据从文件里读取出来或存入文件

    Python 的 json 模块用于处理 JSON 格式的数据,可以将 JSON 数据与 Python 数据结构之间相互转换。以下是具体用法,包括从文件读取 JSON 数据以及将数据写入文件: 1. 将 JSON 数据从文件中读取到 Python 数据结构 代码示例: 解析过程: 2. 将 Python 数据结构写入到文件中(序列化为 JSON) 代码示例:…

    2024年11月26日
    00
  • Llama-Factory 用于大语言模型开发、微调、量化和优化的工具

    Llama-Factory 是一个用于大语言模型开发、微调、量化和优化的工具。针对量化部分,它旨在通过精度压缩的方式减少模型大小和推理时间,同时尽可能保持模型的性能。以下是关于 Llama-Factory 量化部分的详细说明和流程: 1. 为什么需要量化?减少模型大小:传统的大模型通常使用 16-bit 或 32-bit 浮点数表示权重,占用大量存储和内存。…

    2024年12月2日
    00
  • 在 Spring Boot 中实现 Callback 回调的常用方法

    在 Spring Boot 中实现 Callback(回调) 通常用于处理外部系统调用你的服务接口。例如,当一个第三方服务完成某项操作后通知你的应用完成结果。以下是实现回调的完整流程: 1. 回调的基本流程 2. 示例代码 2.1 创建回调接口 假设第三方服务会通过 POST 请求回调数据到 /callback,并发送如下 JSON 数据: 实现代码如下: …

    2024年11月24日
    00
  • 在 VS Code 中配置 Python 开发环境确实很简单!

    在 VS Code 中配置 Python 开发环境确实很简单!以下是超简单的操作步骤,让你快速上手 Python 开发: 1. 安装 VS Code从 VS Code 官网 下载并安装适合你系统的版本(Windows、macOS 或 Linux)。 在 VS Code 中配置 Python 开发环境确实很简单!以下是超简单的操作步骤,让你快速上手 Pytho…

    2024年12月1日
    00
  • java算法— 动态规划之斐波那契数列模型

    斐波那契数列是动态规划中一个经典的模型,其递推关系简单易懂,非常适合作为入门练习。斐波那契数列的定义如下: 在 Java 中,可以通过递归、带记忆化的递归、迭代和优化空间复杂度的方式实现斐波那契数列。 1. 递归实现 最直观的实现,但存在大量重复计算,时间复杂度为 O(2n)。 2. 带记忆化的递归 通过一个数组存储已计算的值,避免重复计算,时间复杂度降为 …

    2024年11月21日
    00
  • 在 Delphi 中创建一个像 C# 那样的 DLL 类库(即面向对象的 DLL)

    在 Delphi 中创建一个像 C# 那样的 DLL 类库(即面向对象的 DLL)可以通过以下步骤实现:1. 创建 Delphi DLL 项目打开 Delphi。选择 File > New > Other > Dynamic-Link Library。在新项目中,默认生成的代码通常是 exports 部分,其中包含了 DLL 导出的函数。2. 定义类你可以在…

    2024年11月29日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信