Spring Batch Bean Scope 转换旧版应用程序

Posted

技术标签:

【中文标题】Spring Batch Bean Scope 转换旧版应用程序【英文标题】:Spring Batch Bean Scope to convert Legacy Application 【发布时间】:2020-12-16 10:37:45 【问题描述】:

我们有一个具有以下架构流程的传统普通 Java 应用程序

Facade ----> Corba 远程 IIOP 连接 --> ServiceCommands

我们想要转换为 SpringBeans(Spring Boot) 并从 MVCController 调用并公开为 RESTAPI 的以上架构

MVCController ---> Facade -->Corba Connection -->ServiceCommands

请告知每层要使用的 Bean 范围以及要遵循的最佳架构

    外观类 Bean - Scope value="session" CorbaConnection 类 bean Scope value="session" ServiceClass bean Scope value="singleton"

【问题讨论】:

为什么它需要是单例以外的任何东西?他们保持状态吗?如果不使用默认值。 CorbaConnection 提交针对每个会话并保持连接状态。外观类可以注释为单例,因为它不维护状态。 哪个会话? Corba session != http session 或除非发生其他事情。您引入控制器/Web API 的事实不应该影响 facade-corba-commands 的东西。 它的 Corba 会话。我们需要将 corba 连接池化一些如何避免每个 http 请求的延迟,因为建立连接需要时间。但是,如果我们保持状态 corba 会话提交,则会出现并发问题。知道如何创建像 hikari 连接池这样的 corba 连接池。 CORBA 太早了。但是您可以尝试使用 commons-pool(作为通用对象池)来汇集 corba 连接/会话。 【参考方案1】:

我们通过创建一个 Corba 连接池解决了这个问题,并使池中的每个连接都是一个范围为“会话”的 Spring bean。对 corba 的每个会话请求都将处于代理模式并在 @service 完成时提交。添加池的所有属性以保持空闲时间并在服务完成后重新连接并返回池。 Service 和 Facade 仍然是单例 bean。再次感谢团队的支持,根据您的经验提供想法提示。

【讨论】:

以上是关于Spring Batch Bean Scope 转换旧版应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Spring中bean的scope详解

Spring常用配置 --- Bean的Scope

Spring之5种Bean Scope

3Spring EL和Bean的Scope

spring bean的scope

Spring中bean的scope