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

news/发布时间2024/5/16 11:11:35

        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.bcls.cn/cVxO/1204.shtml

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

相关文章

【JVM】双亲委派机制

📝个人主页:五敷有你 🔥系列专栏:JVM ⛺️稳中求进,晒太阳 双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢? 方式1:使用Class.forName方法,使用当前类的类加载…

RK3568平台 内核定时器的使用

一.linux内核定时器 硬件为内核提供了一个系统定时器来计算流逝的时间(即基于未来时间点的计时方式,以当前时刻为计时开始的起点,以未来的某一时刻为计时的终点),内核只有在系统定时器的帮助下才能计算和管理时间&…

如何在30天内使用python制作一个卡牌游戏

如何在30天内使用python制作一个卡牌游戏 第1-5天:规划和设计第6-10天:搭建游戏框架第11-20天:核心游戏机制开发第21-25天:游戏界面和用户体验第26-30天:测试和发布附加建议游戏类型游戏规则设计界面设计技术选型第6-…

Android | ArcGIS入门

一、概述 ArcGIS是由Esri开发的地理信息系统(GIS)软件。它用于制图、空间分析和数据可视化。ArcGIS允许用户以各种格式创建、管理、分析和共享地理信息。它通常用于城市规划、环境管理和应急响应等领域。该软件包括一系列工具,用于创建地图、…

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Spring Cloud Gateway 中文文档

Spring Cloud Gateway 中文文档 官方文档 该项目提供了一个建立在Spring Ecosystem之上的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。 Spring Cloud Gateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提…

PHP支持的伪协议

php.ini参数设置 在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。 allow_url_fopen:默认值是ON。允许url里的封装协议访问文件; allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件; 各协议的利用条件和方法 php:/…

鸿蒙应用模型开发-更新SDK后报错解决

更新SDK后提示 “ohos.application.Ability”/“ohos.application.AbilityStage”等模块找不到或者无相关类型声明 问题现象 更新SDK后报错“Cannot find module ‘ohos.application.AbilityStage’ or its corresponding type declarations”,“Cannot find modu…

D9741——用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。低电压输入时误操作保护电路, 定时闩锁、短路保护电路等功能

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点: 高精度基准电路 定时门锁、短路保护电路 低电压输入时误操作保护电路 输出基准电压(2.5V 超过工作范围能进行自动校正 封装形式: SOP16 应用: 电视摄像机 笔记本电…

【leetcode】深搜、暴搜、回溯、剪枝(C++)2

深搜、暴搜、回溯、剪枝(C)2 一、括号生成1、题目描述2、代码3、解析 二、组合1、题目描述2、代码3、解析 三、目标和1、题目描述2、代码3、解析 四、组合总和1、题目描述2、代码3、解析 五、字母大小写全排列1、题目描述2、代码3、解析 六、优美的排列1…

DDoS攻击激增,分享高效可靠的DDoS防御方案

当下DDoS攻击规模不断突破上限,形成了 "网络威胁格局中令人不安的趋势"。专业数据显示,对比2022年上半年与2023年上半年,所有行业的DDoS攻击频率增加了314%。其中零售、电信和媒体公司遭受的攻击规模最大,三个垂直行业的…

Flex布局简介及微信小程序视图层View详解

目录 一、Flex布局简介 什么是flex布局? flex属性 基本语法和常用属性 Flex 布局技巧 二、视图层View View简介 微信小程序View视图层 WXML 数据绑定 列表渲染 条件渲染 模板 WXSS 样式导入 内联样式 选择器 全局样式与局部样式 WXS 示例 注意事项…

Qt程序设计-中英文输入法软键盘实现

本文讲解Qt中英文输入法软键盘实现。 实现目标 中英文切换、大小写切换、特殊字符切换、 使用谷歌中文字库txt文档。 在QWidget窗体上实现,可视化编写软键盘。 实现过程 准备工作:下载谷歌中文字库,按键的图片 创建QWidget项目,在主窗体上添加一个按钮,用于弹出软键…

【RT-DETR有效改进】 多维度注意力机制 | TripletAttention三重立体特征选择模块

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制,它通过三个不同的视角来分析输入的数据,就好比三个人从不同的角度来观察同一幅画,然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

2.Eclipse里面配置Maven及创建Maven项目

1.配置Eclipse的Maven环境. eclipse4.0以上已经安装了Maven插件,无需额外再次安装Maven插件。除非你的Eclipse版本很低,就需要手动安装。那么怎么看我们的 Eclipse里面有没有安装 Maven插件呢?打开如下菜单:Window--->Preferen…

Maven高级(一)

文章目录 Maven高级(一)1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

从底层理解MySQL-字符类型

目录 VARCHAR和CHAR VARCHAR CHAR 存储的长度超限 CHAR和VARCHAR的区别: BLOB和TEXT MySQL中除了数值类型外,另一个用的比较多的就是字符类型了。字符类型有很多不同种类:VARCHAR,CHAR,BLOB,TEXT VARCHAR和CHAR VARCHAR VARCHAR是变…

Github 2024-02-20开源项目日报 Top10

根据Github Trendings的统计,今日(2024-02-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6非开发语言项目2TypeScript项目1Rust项目1 命令行的艺术 创建周期:3198 天Star数量&…

【无标题】

#include<myhead.h>int main(int argc, const char *argv[]) {//定义两个文件句柄int srcfp-1;int destfp-1;//创建子进程pid_t pidfork();//在父进程中打开和复制一半的文件int len0;if(pid>0){//打开源文件if((srcfpopen("./test.txt",O_RDONLY))-1){perr…

ClickHouse快速上手

简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS) 官网(https://clickhouse.com/docs/zh)给出的定义&#xff0c;其实没看懂 特性 ClickHouse支持一种基于SQL的声明式查询语言&#xff0c;它在许多情况下与ANSI SQL标准相同。使用时和MySQL有点相似&#…
推荐文章