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