在Spring中使用Future对象调用Async方法调用

下一个示例将演示Spring容器内部的异步方法调用。 为什么我们需要异步方法调用? 在某些情况下,我们并不真正知道是否需要重播或何时应返回结果。 传统方式在Java EE的异步处理世界中,使用队列/主题。 我们可以在Spring中进行相同的操作,但是如果需要简单的异步调用,则可以按照以下步骤轻松地进行操作:

1.声明


<bean id="executionLogicImpl"class="com.test.components.execution_gateway.ExecutionLogicImpl"abstract="false" lazy-init="default" autowire="default"></bean>

2.声明具有返回类型的接口方法– Future(Java 5+):

有关Future对象的更多信息: http : //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Future.html

public interface ExecutionLogic
{public Future<String> doSomeExecutionLogic(String message);}

*当GatewayProxyFactoryBean注意到返回类型为Future时,它将通过让AsyncTaskExecutor将方法切换到异步模式

3.我们将创建一个作业通道,该通道将收集所有请求并将它们异步发送到另一个类(ExecutionLogicImpl),以便处理它们(一些随机的业务逻辑):

<int:channel id="job1Channel" /><int:service-activator input-channel="job1Channel" ref="executionLogicImpl" method="doSomeExecutionLogic" />

类ExecutionLogicImpl:

public class ExecutionLogicImpl
{public String doSomeExecutionLogic(String msg){try{System.out.println("doing long work on message="+msg);Thread.sleep(8000);}catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}return msg + "_completed";}}

测试类别:

import com.test.components.execution_gateway.ExecutionLogic;public class testExeceution{...
ExecutionLogic executionLogic;
public String sendMsgToExecutionQueue(String msg){Future<String> processedMessage = executionLogic.doSomeExecutionLogic(msg);String finalResult = "";try{finalResult = " " + processedMessage.get(TIMEOUT, TimeUnit.SECONDS);return "1 final result: " + finalResult; // + " " + response;}catch (ExecutionException e){return "1 final result: " + e + finalResult;// + " " + response;}catch (TimeoutException tex){return "1 final result: " + tex + finalResult; // + " " + response;}catch (Exception ex){return "1 final result: " + ex + finalResult;// + " " + response;}}
...
}

*对于永远不会返回响应的情况,可以使用Future对象启用超时。

那么这里发生了什么? 我们发送输入以异步执行。 一旦请求完成处理,发送方将立即等待响应(响应),结果将被发送回发送方。

参考: IdanFridman.com博客上的JCG合作伙伴 Idan Fridman 在Spring中使用Future对象调用Async方法调用 。

翻译自: https://www.javacodegeeks.com/2013/06/invoking-async-method-call-using-future-object-in-spring.html

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

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

相关文章

select里加链接

html select标签加链接的方法有很多&#xff0c;接下来为大家介绍下几个比较经典的&#xff0c;,感兴趣的朋友可以参考下哈&#xff0c;希望可以帮助到你 第一种 &#xff1a; <SCRIPT languagejavascript> <!-- // open the related site windows function mbar…

android ipc 多个客户端,Android IPC之AIDL进阶篇

前言在Android IPC之AIDL中我介绍了如何使用AIDL进行多进程通信&#xff0c;不过由于当时个人水平有限&#xff0c;仅仅介绍了最基础的部分&#xff0c;所以本篇博客主要是在Android IPC之AIDL的基础上深入介绍下AIDL的进阶的几点理解以及用法。AIDL接口中的in out inout的含义…

mysql数据库(3)-查询

数据库设计规范 58到家数据库30条军规解读查询 创建数据库、数据表 -- 创建数据库 create database python_test_1 charsetutf8; -- 使用数据库 use python_test_1; -- students表 create table students( id int unsigned primary key auto_increment not null, name varchar(…

Spring Data Solr教程:向所有存储库添加自定义方法

如果我们在现实生活中的软件项目中使用Spring Data Solr&#xff0c;很可能我们迟早会遇到一个要求&#xff0c;该要求指出我们的应用程序必须能够与本地Solr服务器和SolrCloud进行通信 。 目前&#xff0c;满足此要求意味着我们必须向所有Spring Data Solr存储库添加自定义方法…

远程管理口怎么看地址_红烧羊肉怎么样做才能滋味浓郁,咸甜适口,且回味有奶香?看这里...

原汁原味红烧羊肉此菜在制作上不同于其他红烧羊肉时要放入香料去膻&#xff0c;但在选料上很讲究&#xff0c;也就是说食材的好坏决定菜的好坏。选用一年生的崇明母山羊制作&#xff0c;膻味很小&#xff0c;肉质软嫩细腻&#xff0c;且带有一股淡淡奶香&#xff0c;因此不必放…

css段落文字(中英文混杂)实现两端对齐

案例如下&#xff1a; 混合使用汉字和英文的段落默认如下&#xff1a; 两边是不对齐的(一般情况下&#xff0c;我们对这种情况不做处理&#xff0c;除非需求或者设计非要我们实现两端对齐)。 对齐之后如下&#xff1a; 实现思路 一般的两端对齐是使用text-align:justify&…

44集合:蒜头军学英语

转载于:https://www.cnblogs.com/passion-sky/p/8424769.html

android病毒下载地址,LINE病毒查杀

LINE病毒查杀是免费通话、免费传讯「LINE」的周边应用程序之一。它能保护智能手机上个人信息的安全&#xff0c;使其免于病毒或恶意程序的侵害。您只要执行几个简单的步骤就能确认手机状态或完成病毒扫描。LINE病毒查杀界面LINE病毒查杀软件功能1、智能手机上的病毒将无所遁形!…

Golang系列:打印命令行参数

记得最早在学校机房学习 Java 时&#xff0c;照着书上的例子&#xff0c;写一个最简单 main 方法&#xff0c;当程序运行并在屏幕上打印出 hello world 时&#xff0c;内心竟有种莫名的激动&#xff0c;相信很多人都有这种经历吧。 不管学什么编程语言&#xff0c;都先从命令行…

Javascript 两种 function 定义的区别

大家都知道Javascript 有两个种定义Function的方法非常常用。例如 function a(){ alert ( "a" )} var a function (){ alert ( "a" )} 虽然两个种方式定义出来的 function 调用的时候结果一样&#xff0c;但是中间还是有区别的。举个简单的…

android app的签名,Android APP的签名

Android APP的签名Android项目以它的包名作为唯一的标识&#xff0c;如果在同一部手机上安装两个包名相同的APP&#xff0c;后者就会覆盖前面安装的应用。为了避免Android APP被随意覆盖&#xff0c;Android要求对APP进行签名。下面介绍对APP进行签名的步骤1、选择builder菜单下…

5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?

京东到家订单中心系统业务中&#xff0c;无论是外部商家的订单生产&#xff0c;或是内部上下游系统的依赖&#xff0c;订单查询的调用量都非常大&#xff0c;造成了订单数据读多写少的情况。我们把订单数据存储在MySQL中&#xff0c;但显然只通过DB来支撑大量的查询是不可取的。…

java常用知识

1、transient 修饰的关键字不参与序列号转载于:https://www.cnblogs.com/ng1991/p/8425694.html

可搜索的文件? 是的你可以。 选择AsciiDoc的另一个原因

Elasticsearch是一个基于Apache Lucene的灵活&#xff0c;功能强大的开源&#xff0c;分布式实时云搜索和分析引擎&#xff0c;可提供全文搜索功能。 它是面向文档且无架构的。 Asciidoctor是一个纯Ruby处理器&#xff0c;用于将AsciiDoc源文件和字符串转换为HTML 5 &#xff…

如何判断两个时间段是否有交集

给定两个左闭右开时间段 [A, B)、[X, Y)&#xff0c;如何判断它们是否有交集&#xff1f; 由于时间可以转换为时间戳&#xff0c;时间戳是一个数字&#xff0c;所以我们可以将问题转换为&#xff1a;如何判断两个左闭右开的数字区间是否有交集。 结论是如果 X < B AND A <…

Jquery 获取table当前行内容

$("a[namecheckOriginal]").click(function () { var parent $(this).parent().parent().find("td"); var moduleEnum parent.eq(7).text(); if(moduleEnum""){ } alert(moduleEnmu);}); 转载于:https://www.cnblogs.com/austi…

CSS3 iphone式开关的推荐写法

话说这个问题纠结了近一个小时&#xff0c;为什么呢&#xff1f;看看就知道了。 在公司的商旅Web移动版本项目上有这么一个交互&#xff0c;需要模仿iphone自带的开关&#xff0c;好吧&#xff0c;肯定没什么问题。 Tip&#xff1a;请使用Chrome查看以下案例 嗯&#xff0c;问…

android play gif,Play.gif image in android without using webview

问题I tried like this, which i found on the net to play gif images:private class MYGIFView extends View {Movie movie;InputStream is null;long moviestart;public MYGIFView(Context context) {super(context);// Provide your own gif animation fileis context.ge…

erp 维护费 要交吗_erp系统每年都要缴费吗

erp系统每年都要缴费吗日期&#xff1a;2020-12-29 03:32:04 浏览量&#xff1a;次企业实现企业管理系统必须选择合适的时机&#xff0c;成功实现企业管理系统的最佳时期是在企业的兴盛期及呆滞期&#xff0c;在创业期和衰退期上企业管理系统是很难成功的。在兴盛期及呆滞期&am…

监视和检测Java应用程序中的内存泄漏

因此&#xff0c;您的应用程序内存不足&#xff0c;您日夜不停地分析应用程序&#xff0c;以期捕获对象中的内存漏洞。 后续步骤将说明如何监视和检测您的内存泄漏&#xff0c;以确保您的应用程序安全。 1.怀疑内存泄漏 如果您怀疑有内存泄漏&#xff0c;可以使用一种方便的方…