springboot 任务执行和调度详细介绍

        Spring Boot支持任务执行和调度,这可以通过Spring框架的`TaskExecutor`和`TaskScheduler`接口来实现。这些功能允许你异步执行任务和定时执行任务,这在处理批量作业、定时任务和异步服务时非常有用。
        任务执行
        Spring的`TaskExecutor`接口提供了一个异步执行任务的抽象。在Spring Boot中,你可以通过注解`@EnableAsync`来开启异步执行支持,并通过`@Async`注解来标记需要异步执行的方法。
        使用步骤
        1. **开启异步支持**
        在Spring Boot应用中,首先需要在配置类或者主应用类上添加`@EnableAsync`注解。
 

   @SpringBootApplication@EnableAsyncpublic class AsyncApplication {public static void main(String[] args) {SpringApplication.run(AsyncApplication.class, args);}}



        2. **标记异步方法**
        在需要异步执行的方法上添加`@Async`注解。
 

   @Componentpublic class AsyncService {@Asyncpublic void asyncMethodWithVoidReturnType() {// 耗时逻辑处理}}



        3. **配置线程池(可选)**
        你可以通过配置来定制线程池的大小、队列容量等参数。

   @Configuration@EnableAsyncpublic class AsyncConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(20);executor.setQueueCapacity(50);executor.setThreadNamePrefix("Async-");executor.initialize();return executor;}}


        任务调度
        Spring的`TaskScheduler`接口提供了一个定时执行任务的抽象。在Spring Boot中,你可以使用`@Scheduled`注解来标记需要定时执行的方法。
        使用步骤
        1. **开启定时任务支持**
        在Spring Boot应用中,首先需要在配置类或者主应用类上添加`@EnableScheduling`注解。

   @SpringBootApplication@EnableSchedulingpublic class ScheduleApplication {public static void main(String[] args) {SpringApplication.run(ScheduleApplication.class, args);}}



        2. **标记定时方法**
        在需要定时执行的方法上添加`@Scheduled`注解,并指定定时表达式。
 

   @Componentpublic class ScheduledService {@Scheduled(cron = "0 * * * * ?")public void scheduledMethod() {// 定时逻辑处理}}



        3. **配置定时任务(可选)**
        你可以通过配置来定制定时任务的属性,如线程池大小等。

   @Configurationpublic class SchedulerConfig {@Beanpublic TaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();scheduler.setPoolSize(10);scheduler.setThreadNamePrefix("Schedule-");return scheduler;}}



        注意事项
- 异步执行和定时执行的方法不能与调用它们的主体方法在同一个事务上下文中,因为它们会在不同的线程中执行。
- 使用`@Scheduled`注解时,确保方法的执行时间不会过长,以免影响后续任务的执行。
- 如果你的应用是web应用,并且你想在应用关闭时优雅地关闭任务执行器,可以在应用类中添加`@PreDestroy`注解的方法来关闭执行器。
        总结
        Spring Boot通过`TaskExecutor`和`TaskScheduler`提供了强大的任务执行和调度功能。这些功能使得在Spring Boot应用中实现异步执行和定时任务变得非常简单。通过合理地使用这些功能,你可以提高应用程序的性能和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis的hash数据结构底层简记

hash:k和v都是string的hash表。 HSET(设置集合数据,4.0之前只能设置1个,之后可以设置多个),HSETNX(若k不存在则设置对应v),HDEL(删除指定kv,可以一次删除多个&#xff09…

Eclipse - 查看工程或者文件的磁盘路径

Eclipse - 查看工程或者文件的磁盘路径 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explorer 4.1.0 -> Install2. right-click -> Open in ExplorerReferences 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explo…

Java 中使用Collections类来反转集合的顺序

如何使用Collections类来反转集合的顺序 在Java中&#xff0c;Collections类提供了一些有用的静态方法&#xff0c;用于操作集合。然而&#xff0c;Collections类并没有直接提供反转集合顺序的方法。但是&#xff0c;你可以使用List接口中的Collections.reverse(List<?>…

门店数字化之旅:如何跨越那些难以逾越的鸿沟?

在数字化浪潮席卷全球的背景下&#xff0c;连锁门店运营正面临着一场深刻的变革。这场变革不仅关乎技术的升级&#xff0c;更涉及到商业模式、管理理念以及消费者体验的根本性转变。然而&#xff0c;在这场转型之路上&#xff0c;许多门店却常常遭遇各种痛点&#xff0c;让数字…

2023年总结与2024展望

今天是春节后上班第一天&#xff0c;你懂的&#xff0c;今天基本上是摸鱼状态&#xff0c;早上把我们负责的项目的ppt介绍完善了一下&#xff0c;然后写了一篇技术文章&#xff0c;《分布式系统一致性与共识算法》。接着就看了我近几年写的的年度总结&#xff0c;我一般不会在元…

一个服务器实现本机服务互联网化

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 一个服务器实现本机服务互联网化 前言痛点关于中微子代理实战演练搭建服务端搭建客户端服务端配置代理实现 前言 在数字世界的网络战场上&#xff0c;中微子代理就像是一支潜伏在黑暗中的数字特工队&…

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类 文章目录 LTDMC.dll下载LTDMC.cs LTDMC.dll C#调用封装下载ICard.cs 运动控制卡接口Card.cs 运动控制卡抽象类CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类CardList.cs 总线卡列表封装 LTDMC.dll下载 最新…

100天精通Python(实用脚本篇)——第116天:基于selenium实现反反爬策略之添加cookie登录网站

文章目录 专栏导读1. cookie是什么?2. cookie登录网站的优点?3. 浏览器怎么查看cookie?4. 代码获取cookie5. 添加cookie登录网站专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的…

【笔记------STM32】MX_RTC_Init()初始化RTC时RTC_ISR_INITF位超时失败的解决方法

RTC和flash有点像&#xff0c;有些功能需要解锁才能配置&#xff0c;虽然cubeMX生成的RTC部分的解锁配置正确&#xff0c;但却没有配置好前提条件&#xff1a;关闭PWR模块的备份域写保护使能&#xff0c;有点奇怪&#xff0c;手动关掉就好了 现象&#xff1a;进入RTC_EnterInit…

java数据结构与算法刷题-----LeetCode239. 滑动窗口最大值

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;指针法 解题思路 我们以每一个窗口来看&#xff0c;找…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(二)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

【软考中级备考笔记】数据的表示和校验码

2024/2/18 – 数据的表示和校验码 天气&#xff1a;阴雨 春节假期结束后第一个工作日&#xff0c;开始备考中级软件工程师。 希望在今年5月底的软考中取得中级证书 视频地址&#xff1a;https://www.bilibili.com/video/BV1Qc411G7fB 1. 计算机的总体架构 从下图中可以看出&am…

三防平板丨平板终端丨加固平板丨户外勘测应用

随着科技的不断发展&#xff0c;现代勘测业也在不断升级。相较于传统的勘测设备&#xff0c;三防平板在户外勘测中有着广泛的应用。那么&#xff0c;三防平板在户外勘测中究竟有哪些优势呢&#xff1f; 首先&#xff0c;三防平板具备极强的防水、防尘、防摔能力。在野外勘测中&…

应用管理中心架构的设计与实现

应用管理中心在现代软件开发中扮演着重要角色&#xff0c;它能够帮助开发团队有效管理和监控各种应用的运行情况。本文将介绍如何设计和实现一个高效、可靠的应用管理中心架构&#xff0c;以提升开发团队的工作效率和系统稳定性。 1. 架构概述 - 介绍应用管理中心的整体架构…

大页内存配置引发的数据库性能问题

问题背景: 用户来电报故障&#xff0c;他们一套正常运行的Oracle数据库&#xff0c;突然出现了10分钟左右的性能卡顿问题&#xff0c;期间全部的业务操作都变慢&#xff0c;他们通过查看问题期间的awr报告&#xff0c;发现数据库在问题时间出现大量的libary cache等待事件&…

金蝶K3-WISE与黑湖MES对接集成查询销售订单打通导入销售订单

金蝶K3-WISE与黑湖MES对接集成查询销售订单打通导入销售订单 接入系统&#xff1a;金蝶K3-WISE 金蝶K/3WISE是一款面向成长型企业&#xff0c;适应企业在快速成长过程中业务与管理的不断变化的信息化平台&#xff0c;实现云服务、ERP、物联网的融合&#xff0c;帮助企业从信息化…

每天分享一个Python库-Chardet

每天分享一个Python库-Chardet 前言 Python中有许多好用、有意思的库&#xff0c;有一些可以大大提高开发效率&#xff0c;有的可以为我们解决很多棘手的问题&#xff0c;从今天开始我会每天给大家分享一个Python库。今天分享的是一个跟字符串编码有关的库—chardet Chardet…

C++面试宝典第29题:sizeof使用大全

题目 给出下面代码的输出值。 #include <iostream> #include <string> using namespace std;#define PRINT_SIZEOF(a) printf("sizeof("#a##") = %u\n", (unsigned int)sizeof(a)) #define PRINT_STRLEN(a) printf("strlen(&q…

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统&#xff1b; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …

Nginx错误502 Bad Gateway

使用Nginx配置的反向代理&#xff0c;浏览器访问的时候出现 “502 Bad Gateway” 错误&#xff0c;检查了一下后台error文件&#xff0c;发现有类似下面的错误 2024/02/05 14:21:00 [error] 166605#166605: *11 upstream sent too big header while reading response header f…