有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用多个数据源管理会话的java问题

我正在从事一个项目,我们每个服务引用四个独立的数据源。到目前为止,我们一直在使用ProxyFactoryBean来引用Dao目标和事务Intereceptor—类似这样的东西

<bean id="readOnlyUserProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
   <property name="target" ref="readOnlyDao"/>
   <property name="interceptorNames">
      <list>
         <value>readOnlyTransactionInterceptor</value>
      </list>
   </property>
</bean>

对于不同的DAO,还有3个其他类似的代理。所有这些都指向不同的事务拦截器,而这些拦截器又连接到不同的事务管理器。简而言之,每个服务连接到4个dao代理,每个dao代理引用一个单独的事务拦截器,每个事务拦截器又引用一个单独的事务管理器,该事务管理器连接到4个不同的数据源。到目前为止,使用lazy=“false”可以正常工作

现在,为了优化性能,我们希望启用“延迟加载”并将hibernate会话传送到处理程序层。我们认为最好的方法是通过“TransactionProxyFactoryBean”,因为我们不想使用OpenSessionInView方法

我们已经尝试了一些方法,但由于我们通过每个服务连接到4个独立的数据源,现在我们可以通过这种方式将四个独立的事务管理器连接到“TransactionProxyFactoryBean”上,所以我们陷入了困境。因此,我们无法找到在处理程序/服务层中管理来自不同数据源的事务的方法

我刚刚开始这项工作,在Spring事务管理方面没有太多经验。请指导我可能采取的任何方法


共 (1) 个答案

  1. # 1 楼答案

    跨多个数据源管理事务是应用服务器的工作。appserver将通过JTA API公开这些事务,Spring可以使用JtaTransactionManager将JPA API连接到Spring API

    至于如何配置应用服务器本身,这取决于它是什么应用服务器,您应该对该文档进行一些研究。这可能是一个相当复杂的操作,尤其是如果数据源分布在不同的数据库服务器上(在这种情况下,您需要一个XA事务监视器,这一切都变得非常复杂)