在一个and应用程序中,我使用不同的组件,它们都使用Spring3.0.x,它们有自己的DataSource和TransactionManager (都有不同的名称)。它们都通过包含spring配置的“主”webapp包含在上下文中。
<import resource="classpath:spring-config-componentName.xml" />在每个Spring信任的组件中,我使用声明式事务管理,通过
<tx:annotation-driven transaction-manager="transactionManager_componentName" />对于每个应该是事务性的方法,我添加了一个如下所示的注释:
@Transactional(propagation=Propagation.REQUIRES_NEW, value="transactionManager_componentName")我遇到的问题是,我发现只创建了一个TransactionInterceptor,它引用了一个transactionManagers,但没有引用组件本身。有办法处理这事吗?喜欢将TransactionInterceptor指定为bean,然后在@Transactional注释中引用它吗?
我认为通过在每个组件中指定一个TransactionProxyFactoryBean并通过xml进行声明性传输管理是有可能的。但这是我想避免的。
如Spring (10.5.6.2多个事务管理器具有@ Transaction)中所描述的,建议的方法不起作用。
发布于 2012-02-17 09:42:20
最后,我发现了问题所在,我不得不说,它的工作原理是在spring文档中描述的。如果您在Spring容器中使用多个TransactionManager,并且使用的是@Transaction,那么如果您将TransactionManager指定为这样的话,它会执行而不是的任务:
<tx:annotation-driven transaction-manager="transactionManager_componentName" />要删除TransactionManager规范并使用如下配置,只需执行以下所有操作:
<!-- ========== ENABLE ANNOTATIONS ========== -->
<tx:annotation-driven/>
<!-- ========== TRANSACTION MANAGER ========== -->
<bean id="transactionManager_component1"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource_component1" />
<property name="nestedTransactionAllowed" value="true" />
<qualifier value="component1"/>
</bean>对于您希望在事务中运行的方法,只需按如下方式指定:
@Transactional(value="component1")https://stackoverflow.com/questions/9266595
复制相似问题