springboot中@Async的使用

2023-10-27

@async注解的使用

springboot中的启动类中需要添加注解@EnableAsync来开启异步调用,在需要异步执行的方法上添加@Async(“taskExecutor”)注解进行标注

启动类:

@EnableScheduling
@EnableAsync
@SpringBootApplication
@ComponentScan("com.swj")
public class WebApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApiApplication.class, args);
    }

线程池:一般会添加一个线程池的配置,不影响主线程,异步方法交给单独的线程完成

@Configuration
public class AsyncConfig {

    private static final int MAX_POOL_SIZE = 50;

    private static final int CORE_POOL_SIZE = 20;

    @Bean("taskExecutor")
    public AsyncTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
        taskExecutor.setCorePoolSize(CORE_POOL_SIZE);
        taskExecutor.setThreadNamePrefix("async-task-thread-pool");
        taskExecutor.initialize();
        return taskExecutor;
    }
}

方法调用:需要执行异步调用的方法示例(带有返回值的Future,需要用到AsyncResult)

@Service
public class DeviceProcessServiceImpl implements DeviceProcessService {

    @Autowired
    private DeviceRpcService deviceRpcService;

    @Async("taskExecutor")
    @Override
    public Future<Map<Long, List<ProcessDTO>>> queryDeviceProcessAbilities(List<BindDeviceDO> bindDevices) {
        if (CollectionUtils.isEmpty(bindDevices)) {
            return new AsyncResult<>(Maps.newHashMap());
        }
        List<Long> deviceIds = bindDevices.stream().map(BindDeviceDO::getDeviceId).collect(Collectors.toList());

        List<DeviceInstanceWithProcessResp> devices = deviceRpcService.getDeviceProcessAbility(deviceIds);
        Map<Long, List<ProcessDTO>> deviceAbilityMap = Maps.newHashMap();
        ...
        return new AsyncResult<>(deviceAbilityMap);
    }
}

对加了@async注解方法有返回值的调用

private ProcessAbilityData asyncCollectProcessAbilities(List<BindDeviceDO> bindDevices,
                                                            List<BindStaffDO> bindStaffs, String dccId) {
        // 返回值
        Future<Map<Long, List<ProcessDTO>>> deviceProcessFutureResult = deviceProcessService
            .queryDeviceProcessAbilities(bindDevices);
        Future<Map<String, List<ProcessDTO>>> staffAbilityFutureResult = staffProcessService
            .queryStaffProcessAbilities(bindStaffs, dccId);
        Map<Long, List<ProcessDTO>> deviceAbilityMap;
        Map<String, List<ProcessDTO>> staffAbilityMap;
        try {
            deviceAbilityMap = deviceProcessFutureResult.get();
            staffAbilityMap = staffAbilityFutureResult.get();
        } catch (InterruptedException | ExecutionException e) {
            ...
        }
        return new ProcessAbilityData(deviceAbilityMap, staffAbilityMap);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot中@Async的使用 的相关文章

  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • SOLO算法学习

    SOLO神经网络学习 在博客的最开始 先简单谈谈图像处理的几大目标 首先是最基本的目标分类 Object Classification 输出结果 图像中是气球 然后目标检测 Object detection 是在图像分类的基础上 给出每个气
  • 【转载】Chrome插件(扩展应用)开发全攻略

    背景 遇到了一些大量重复操作的任务 需要从页面上获取信息 查询对应的说明 整理出对应内容 然后录入到页面 提交保存 操作过程很繁琐 内容需要人为去做细微的修改 无法完全模板化 所以不好批量处理 鉴于此 考虑使用chrome插件 简化其中一些
  • VC++ CString Find函数的用法说明

    名称 CString Find 在一个较大的 字符 串中查找字符或子字符串 int Find TCHAR ch const int Find LPCTSTR lpszSub const int Find TCHAR ch int nStar
  • pycharm入门

    pycharm基础使用步骤 1 下载pycharm 2 新建Python工程 1 如下 点击Create New Project 2 选择保存位置 点击create 3 命名 打开界面如下 4 这时就可以创建文件了 项目文件夹右击new g
  • 全面探索 FreeMarker 模版引擎的扩展性

    FreeMarker 模版引擎简介 FreeMarker 是一个采用 Java 开发的模版引擎 是一个基于模版生成文本的通用工具 FreeMarker 被设计用来生成 HTML Web 页面 特别是基于 MVC 模式的应用程序 虽然 Fre
  • xxxx is deprecated

    编译工程发现json object object get is deprecated 最终解决 jason c库中有声明 deprecated Please use json object object get ex json c库编译的时
  • 中国银行业数字化转型研究报告 附下载

    以在数据化 智能化为特征的数字化转型是银行业的一次产业革命 以支付功能的在线化为例 近年来移动支付领域的 脱媒 给银行上了生动的一课 即使是全国性的大型银行 面对互联网公司的 降维 竞争也是无能为力 区域性银行更是全面失守 这种数字化金融服
  • 如何阻止点击其他区域,input框会失去焦点事件

    如何阻止点击其他区域 input输入框会失去焦点位置 阻止失去焦点 通过a标签 设置user select为none 通过js阻止默认事件 通过内联js实现 在开发过程中 总会碰到以下两个情况 要求点击某个区域 阻止input框 或者设置了
  • 1.30 fcntl函数

    include
  • 什么是super?如何使用super调用超类构造函数?

    从之前的文章中分享过的一些知识 从Box派生的类并没有体现出它们的实际上是多么有效和强大 例如 BoxWeight构造函数明确的初始化了Box 的width height和depth成员 这些重复的代码在它的超类中已经存在 这样做效率很低
  • 7-40 一维数组最大值和最小值交换 (10 分)

    找出含有10个元素一维数组中的最大值和最小值 并互换这两个数的位置 输入格式 在一行中输入10个整数 数据之间只能用1个空格间隔 输出格式 在一行中按照 max 最大值 min 最小值 的格式输出结果 最大值和最小值均原样输出 没有列宽控制
  • 关于C/C++动态申请空间释放和内存泄漏问题介绍

    1 动态申请空间 1 1 基本内容 动态申请的空间没有具体名称 只能通过指针间接访问 无论new还是malloc方式 动态申请空间都是存放在堆中 有别于系统自动分配的空间是存放在堆栈中 即栈 栈中系统分配的空间 在使用结束会自动释放 而程序
  • UVA11134 Fabled Rooks

    UVA11134 Fabled Rooks 题目链接 问题解析 在n行n列的棋盘上放n个车 第i个车在给定的矩形Ri之内 且任意两个车不能相互攻击 即任意两个车不在同一行或同一列 求每个车的位置坐标 首先 一个车所在的行不会影响它所在的列
  • OPENCV缺陷检测小例子

    前阵子在某公众号看到halcon做缺陷检测的例子 由于不会使用halcon 其附带的 dev代码也看不懂 于是自己写了opencv代码来实现 原图如下 其目的是要检测红框中的缺陷 代码如下
  • matlab 计算点云协方差矩阵

    目录 一 概述 1 算法概述 2 主要函数 二 代码示例 三 结果展示 四 参数解析 输入参数 输出参数 五 参考链接 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 概述
  • C++不定参数函数

    类似这样的函数定义 printf char fmt 示例 自定义一个可变函数 Func char s char fmt 特点是函数必须有一个char fmt作为变量 它一般用在可变参数的前一个参数 根据这个变量计算出后续参数的地址或值 它们
  • php中table的最小宽度,table宽度

    题目虽然是说table的宽度 但其实最让人抓狂的是单元格td的宽度 平时开发中也经常会遇到这方面的问题 所以我找资料学习table的宽度的算法 table layout table layout定义了表格布局算法 值为auto或fixed
  • pycharm同步代码到远程服务器

    首先有一个python的项目 可以新建一个 Tools gt Development gt Configurations 新建一个SFTM连接 在connection页面配置服务器的用户名与密码 Root path这里配置一个根目录 注意R
  • IOException parsing XML document from class path resource [spring-mvc.xml]

    如果你写的都没问题 那一定是静态资源导入问题 可以试试下面的这个
  • springboot中@Async的使用

    async注解的使用 springboot中的启动类中需要添加注解 EnableAsync来开启异步调用 在需要异步执行的方法上添加 Async taskExecutor 注解进行标注 启动类 EnableScheduling Enable