Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring事务管理用于处理多个数据源_Java_Spring_Transactional - Fatal编程技术网

Java Spring事务管理用于处理多个数据源

Java Spring事务管理用于处理多个数据源,java,spring,transactional,Java,Spring,Transactional,这对你来说可能是一个重复的问题,但我找不到(至少我不明白)一个满意的答案,因此再次提问 我正在使用两个数据源(MySQL和Oracle)。以下是执行流程: 主方法A调用方法B(写入Oracle数据库),然后它(方法A)调用方法C(写入mySQL数据库),然后它(方法A)调用方法D(写入Oracle数据库) 如果任何一个地方发生故障,都应该回滚。目前只有Oracle数据库中的更改被回滚&mySQL数据库没有回滚 我定义了两个事务管理器 =========> First <=======

这对你来说可能是一个重复的问题,但我找不到(至少我不明白)一个满意的答案,因此再次提问

我正在使用两个数据源(MySQL和Oracle)。以下是执行流程: 主方法A调用方法B(写入Oracle数据库),然后它(方法A)调用方法C(写入mySQL数据库),然后它(方法A)调用方法D(写入Oracle数据库)

如果任何一个地方发生故障,都应该回滚。目前只有Oracle数据库中的更改被回滚&mySQL数据库没有回滚

我定义了两个事务管理器

=========> First <=========

<tx:annotation-driven transaction-manager="txManager" mode='proxy' proxy-target-class='true’/>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="SessionFactory" />
</bean>
<bean id=“SessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean” parent="AbstractSessionFactory" depends-on="AppConfigHelper”>
<property name="hibernateProperties”> 
...
ORACLE DB Properties
</property>
</bean>
<aop:aspectj-autoproxy/>

==============================
=========> Second <=========

<tx:annotation-driven transaction-manager="txManager2" mode='proxy' proxy-target-class='true'/>
<bean id="txManager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="SessionFactory2" />
    <qualifier value="CherryTransaction" />
</bean>
<aop:aspectj-autoproxy/>
<bean id="SessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" parent="AbstractSessionFactory2" depends-on="AppConfigHelper">
    <property name="hibernateProperties">
    ...
    MYSQL DB Properties
    </property>
</bean>

==============================

==========>首先要让它起作用,您需要使用JTA。如果您在MySQL中使用不支持事务的存储引擎,即使这样也不会有帮助。使用MySQL

如果将MySQL与支持事务的存储引擎一起使用,则需要为Oracle和MySQL数据源配置XA驱动程序,并确保在容器的事务中登记这两个数据源。然后,Spring需要参与相同的事务。您不能为此使用HibernateTransactionManager,但需要JtaTransactionManager,如中所述

所以,你需要的是

  • 在MySQL上使用InnoDB或BDB存储引擎
  • 在应用服务器中配置XA数据源,而不是常规数据源
  • 在Spring配置上使用JtaTransactionManager

  • 非常感谢您的快速回复eis@. 让我试试这个设置。我还有一个问题: