使用Spring Boot整合定时任务(Schedule)

ops/2024/9/20 1:26:15/ 标签: spring boot, java, spring

1、添加依赖

pom.xml文件中添加Spring Boot的定时任务依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>

2、创建定时任务类

创建一个Java类,用于定义定时任务的逻辑。在该类中使用@Scheduled注解指定定时任务的执行时间,并编写批量新增的逻辑。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component // 表明这是一个Spring组件
public class BatchAddTask {@Autowiredprivate YourService yourService; // 注入批量新增的服务// 每天凌晨1点执行一次批量新增任务@Scheduled(cron = "0 0 1 * * ?")public void batchAdd() {// 调用服务类的方法执行批量新增操作yourService.performBatchAdd();}
}

3、编写批量新增逻辑

在服务类中编写批量新增的逻辑。

import org.springframework.stereotype.Service;@Service // 声明这是一个服务类
public class YourService {public void performBatchAdd() {// 执行批量新增操作的逻辑// 可以从数据库或其他数据源获取数据,并进行批量插入操作// 示例代码:// yourRepository.batchInsert(yourDataList);}
}

4、@Scheduled属性

在使用Spring的定时任务时,可以通过@Scheduled注解的属性来配置定时任务的执行时间。以下是常用的@Scheduled注解属性:

  1. cron:用于配置Cron表达式,指定定时任务的执行时间规则。Cron表达式由6或7个空格分隔的字段组成,分别表示秒、分、小时、日期、月份、星期和年份(可选)。例如,cron = "0 0 1 * * ?"表示每天凌晨1点执行一次任务。

  2. fixedDelay:用于指定两次任务执行之间的固定延迟时间,单位为毫秒。例如,fixedDelay = 5000表示当前任务执行完成后,等待5秒后再执行下一次任务。

  3. fixedRate:用于指定两次任务开始执行的固定时间间隔,单位为毫秒。例如,fixedRate = 60000表示每隔1分钟执行一次任务,不论任务的执行时间。

  4. initialDelay:用于指定定时任务首次执行的延迟时间,单位为毫秒。例如,initialDelay = 10000表示首次执行任务前等待10秒。

  5. zone:用于指定时区,影响Cron表达式的解析和定时任务的执行时间。默认情况下,定时任务使用服务器的时区。

这些属性可以根据实际需求组合使用,以满足不同场景下的定时任务需求。例如,可以使用cron属性配置复杂的定时任务规则,而使用fixedDelayfixedRate属性配置简单的周期性任务。

5、优化方案

当前实现是单线程的,如果批量新增的数据量很大,可能会导致定时任务执行时间过长,影响系统的响应性能。可以考虑使用多线程或异步任务来提高批量新增的效率。

配合线程池使用

当实现SchedulingConfigurer接口时,您可以对Spring的定时任务进行更加细致和定制化的配置。以下是一些更详细的用法示例:

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;import java.util.concurrent.Executor;
import java.util.concurrent.Executors;@Configuration
public class CustomSchedulingConfigurer implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(taskScheduler());}public Executor taskScheduler() {// 创建一个自定义的线程池,可根据需求设置线程池大小、线程名称等属性ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5); // 设置核心线程数executor.setMaxPoolSize(10); // 设置最大线程数executor.setThreadNamePrefix("custom-task-executor-"); // 设置线程名称前缀executor.setQueueCapacity(100); // 设置任务队列容量executor.initialize();return executor;}
}


http://www.ppmy.cn/ops/7779.html

相关文章

搜索+剪枝,LeetCode 216. 组合总和 III

目录 一、题目 1、题目描述 2、接口描述 python3 cpp 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 python3 cpp 一、题目 1、题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多…

Linux下跟踪某个进程的内核处理时延消耗情况

1.利用系统自动的trace功能&#xff0c;编辑如下脚本&#xff0c;vim trace_process.sh #!/bin/sh cd /sys/kernel/debug/tracing/ #清空原有跟踪信息 echo > trace echo nop > current_tracer #设置要跟踪的进程 echo "pid281255" echo 281255 > set_ftra…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(TcpServer板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器&#xff08;TcpServer板块&#xff09; 一、思路图二、模式关系图三、定时器的设计1、Linux本身给我们的定时器2、我们自己实现的定时器&#xff08;1&#xff09;代码部分&#xff08;2&#xff09;思…

ASP.Net MVC 登录页面实现RSA非对称加密

一、什么是RSA非对称加密 RSA是1977年由罗纳德李维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;一起提出的。 RSA算法是一种非对称加密算法&#xff0c;与对称加密算法不同…

【CSS】CSS实现元素逐渐消失(实现元素透明逐渐消失/模糊)

mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 10%);mask-image 属性用于定义一个遮罩&#xff0c;它可以隐藏元素的一部分或全部内容。在这个示例中&#xff0c;我们使用 mask-image 属性来定义一个线性渐变的遮罩&#xff0c;使得列表项的内…

达梦数据库执行sql报错:数据溢出

数据库执行sql报错数据溢出 单独查询对应的数字进行计算是不是超过了某个字段类型的上限或下限 如果已经超过了&#xff0c;进行对字段进行cast类型转换处理&#xff0c;转换为dec num都可以尝试 这里就是从 max(T.BLOCK_ID as dec*8192t.bytes)/1024/1024 max_MB,换成了这个…

rust 卸载重新安装 安装

原因&#xff1a;接触区块链时报错 linking with x86_64-w64-mingw32-gcc failed: exit code: 1 Rust编译需要C环境&#xff0c;如果你没有&#xff0c;Rust也能安装成功&#xff0c;只是无法编译代码 C的编译工具有两个&#xff0c;一个是msvc&#xff0c;也就是visual studi…

汽车视频智能剪辑解决方案,满足用户对高品质汽车视频的追求

随着汽车智能化和互联网技术的快速发展&#xff0c;车载视频已经成为现代驾驶生活不可或缺的一部分。然而面对海量的行车视频&#xff0c;如何高效地剪辑、整理并分享这些精彩瞬间&#xff0c;一直是车主和汽车内容创作者们所面临的难题。美摄科技&#xff0c;作为领先的视频智…

k8s调度场景

15个KUBERNETES调度情景实用指南 Kubernetes调度是确保集群中的Pod在适当节点上运行的关键组件。通过灵活配置调度策略&#xff0c;可以提高资源利用率、负载平衡和高可用性。 在本文中&#xff0c;我们将深入探讨一些实际的Kubernetes调度场景&#xff0c;并提供相应的配置示…

【AI自媒体制作】【AI工具】Midjourney中文站

Midjourney Midjourney中文站, MJ中文站 - 专业AI绘图网站 广场 绘画广场&#xff1a; 包含大量其他用户生成好的图片&#xff0c;可以自由保存。 视频广场&#xff1a; 普通用户目前只支持查看&#xff0c;无法下载 画夹广场&#xff1a; 有很多免费的画夹&#xff0c;比…

华为机考入门python3--(16)牛客16-购物单最大满意度

分类&#xff1a;动态规划&#xff0c;组合&#xff0c;最大值&#xff0c;装箱问题 知识点&#xff1a; 生成递减数 100, 90, 80, ..., 0 range(100, -1, -10) 访问列表的下标key for key, value in enumerate(my_list): 动态规划-捆绑装箱问题 a. 把有捆绑约束的物…

大数据Hive中的UDF:自定义数据处理的利器(上)

文章目录 1. 前言2. UDF与宏及静态表的对比3. 深入理解UDF4. 实现自定义UDF 1. 前言 在大数据技术栈中&#xff0c;Apache Hive 扮演着数据仓库的关键角色&#xff0c;它提供了丰富的数据操作功能&#xff0c;并通过类似于 SQL 的 HiveQL 语言简化了对 Hadoop 数据的处理。然而…

DevOps(九)Selenium 介绍和Jenkins集成

Selenium 是一个开源的自动化测试工具&#xff0c;主要用于 Web 浏览器自动化测试。它支持多种编程语言&#xff0c;包括 Java、Python、Ruby、C# 等&#xff0c;可以在多种浏览器中运行&#xff0c;包括 Chrome、Firefox、IE、Edge 等。 Selenium 的主要特点 多浏览器支持&a…

负载均衡的原理和算法

负载均衡——这是一个在网络世界中非常重要的概念。 一&#xff0c; 负载均衡的原理 想象一下&#xff0c;你在学校的食堂里&#xff0c;只有一个厨师在忙碌地为所有饥饿的学生准备午餐。如果每个人都排队等同一个厨师&#xff0c;那么等待时间会很长&#xff0c;而且厨师可能…

JAVA 整合 亚马逊AWS S3(文件上传,文件下载等)

JAVA 整合 亚马逊AWS S3(文件上传,文件下载) 1.添加依赖 因为aws需要发送请求上传、下载等api,所以需要加上httpclient相关的依赖 <dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>1.12…

2.1K Star微软开源的高质量 iot库

功能描述 该项目是一个开源的 .NET Core 实现&#xff0c;旨在帮助开发者构建适用于物联网(IoT)设备和场景的应用程序。它提供了与传感器、显示器和输入设备等相互作用所需的 GPIO 引脚、串口等硬件的接口。该仓库包含 System.Device.Gpio 库以及针对各种板卡&#xff08;如 Ra…

东岸科技将赴港IPO,冲刺催收第一股

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 「镭射财经」独家获悉&#xff0c;东岸科技即将开启IPO&#xff0c;向港交所递交上市申请。计划上市的为公司科技板块&#xff0c;拟募集资金主要用于不良资产管理数字化创新。 今年3月&#xff0c;东岸科技董事长朱铁…

mfc140.dll丢失如何修复,分享多种有效的修复方法

在日常操作和使用电脑的过程中&#xff0c;我们可能会遇到一种较为常见的问题&#xff0c;即在尝试启动或运行某个应用程序时&#xff0c;系统突然弹出一个错误提示窗口&#xff0c;明确指出“mfc140.dll文件丢失”。这个mfc140.dll实际上是一个动态链接库文件&#xff08;DLL&…

苍穹外卖微信小程序名称修改

pages/index/index/wxml里ctrlf搜索“苍穹”&#xff0c;修改之后保存即可

031——从GUI->Client->Server->driver实现dht11数据的采集

目录 0、设置ip 1、修改显示界面 2、 修改客户端 3、 修改服务器程序通信部分 4、 修改驱动处理程序 5、 重写驱动程序 6、 展示 0、设置ip 因为ifconfig命令要被淘汰了&#xff0c;所以我们改成使用ip命令设置ubuntu的ip ip addr add 192.168.5.10/24 dev ens36 ip …