下一个示例将演示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

在Spring中使用Future对象调用Async方法调用相关推荐

  1. @async方法不调用了_在Spring中使用Future对象调用Async方法调用

    @async方法不调用了 下一个示例将演示Spring容器内部的异步方法调用. 为什么我们需要异步方法调用? 在某些情况下,我们并不真正知道是否需要重播或何时应返回结果. 传统方式在Java EE世界 ...

  2. Java中String对象的replaceAll方法调用性能优化小技巧

    Java中String对象的replaceAll方法调用性能优化小技巧 0x01 Java中String对象的replaceAll方法调用性能优化小技巧 1.1 What? 1.2 Why? 1.3 ...

  3. 【每日提高之声明式事物】spring声明式事务 同一类内方法调用事务失效

    2019独角兽企业重金招聘Python工程师标准>>> [问题] Spring的声明式事务,我想就不用多介绍了吧,一句话"自从用了Spring AOP啊,事务管理真轻松啊, ...

  4. Spring 中获取 request 的几种方法,及其线程安全性分析

    概述 在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址.请求的url.header中的属性(如cookie.授权信息).body中的数据等 ...

  5. dubbo消费端如何找到服务端对象,进行方法调用的

    关于该问题,要从以下几点点出发 消费端如何生成代理对象的 dubbo的ReferenceBean实现了InitializingBean,这是Spring中Bean的生命周期的方法,所以生成代理对象的逻 ...

  6. spring声明式事务 同一类内方法调用事务失效

    一 宏观说明 [问题] Spring的声明式事务,我想就不用多介绍了吧,一句话"自从用了Spring AOP啊,事务管理真轻松啊,真轻松:事务管理代码没有了,脑不酸了,手不痛了,一口气全配上 ...

  7. oracle失效对象是什么意思,Oracle中无效数据库对象的处理方法

    Oracle中无效数据库对象的处理方法 Oracle总是会尝试自动重编译无效的PL/SQL对象和视图,但是可能不会成功.虽然Oracle可能建议手动地进行编译,不过我们并非必须进行这个操作.通常无效对 ...

  8. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  9. Spring中事务提交成功后处理的异步调用方法

    为什么80%的码农都做不了架构师?>>>    问题 想要在Spring中提交事务成功后,调用一部分异步方法. 解决 TransactionSynchronizationManage ...

最新文章

  1. springcloud是什么_阿里P8道出,入职阿里必会199道SpringCloud面试题,你能掌握多少?...
  2. 这张程序员情绪波动图,未免太真实了! | 每日趣闻
  3. docker学习------centos7.5下的swarm集群可视化构建
  4. php 获取用户名,PHP如何获取当前windows系统的登录用户名
  5. 二分查找-数组实现(小trick)
  6. 神经网络十大学习率衰减提效策略
  7. 【微信小程序】wx:if
  8. [原创] GSM/GPRS 以及CDMA区分以及相关模块选型
  9. angular接口传参
  10. C 怎么读取Cpp文件_从PCD文件写入和读取点云数据
  11. OpenSSL常见用法
  12. 魔方机器人设计中的问题
  13. 错误提示 - WPS Office 文字 正在运行
  14. Bootstrap 导航栏
  15. 寄人东篱下,愤然见南山
  16. 古风一棵桃花树简笔画_唯美意境桃花古风句子
  17. 去美国看展会1:办理护照和签证
  18. 图片识别转公式,GitHub 又一 LaTeX 神器面世!
  19. [转] Android Miracast投屏入门
  20. uniapp 密码显示隐藏

热门文章

  1. 语言 高速公路超速处罚_重磅!全国高速将统一限速,这4种超速不再扣分罚款!【饮茶论道】...
  2. 转:json与map互转
  3. (转)es 聚合查询并返回每个组的数据
  4. tomcat(11)org.apache.catalina.core.StandardWrapper源码剖析
  5. vue - resource 使用过程的坑
  6. HDU2612(BFS算法)
  7. solid设计原则_SOLID设计原则
  8. redis lettuce_Redis Client Lettuce 5 GA发布
  9. 网络研讨室_即将举行的网络研讨会:调试生产中Java的5种最佳实践
  10. 根据变量推断变量类型_Java A的新本地变量类型推断