有问题的项目使用Spring 4,Java 7,并坚持使用Oracle和PostgreSQL。
我正在为将数据保存到两个数据库的服务编写集成测试。对于集成测试,我希望两个事务都自动回滚。我知道如果不使用Java 8,我不能使用“重复”注释,因为我会收到编译错误。如果我在类级别放置一个注释,并且在方法级别放置另一个注释,我可以编译得很好。但是,似乎列出的较高注释不会回滚。为了澄清,如果我在类或方法级别声明@Transactional
注释(Oracle或PostgreSQL)作为独立注释,那么一个回滚可以完美地工作。但是,如果我在类级别实现一个注释,并在方法级别实现另一个注释,则回滚仅适用于方法级别而不适用于类级别。
我怀疑多个@Transactional
注释可以正常工作,只要该进程一次只尝试回滚一个。例如:一种方法使用Oracle Transaction,另一种方法使用PostgreSQL事务。
有什么想法吗?
答案 0 :(得分:4)
好的,我想出了怎么做。有一个单独的SpringFramework项目" spring-data-commons"它有一个名为ChainedTransactionManager的类。我按如下方式连接了一个bean:
<bean id="chainedTransactionManager"
class="org.springframework.data.transaction.ChainedTransactionManager">
<constructor-arg>
<list>
<ref bean="postgresqlTransactionManager"/>
<ref bean="oracleTransactionManager"/>
</list>
</constructor-arg>
</bean>
然后我使用chainedTransactionManager作为我的注释
@Transactional(transactionManager = "chainedTransactionManager")
在进行此更改后,两个事务都按预期回滚。