首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个TransactionInterceptor的弹簧TransactionManager

具有多个TransactionInterceptor的弹簧TransactionManager
EN

Stack Overflow用户
提问于 2012-02-13 19:23:01
回答 1查看 3.8K关注 0票数 0

在一个and应用程序中,我使用不同的组件,它们都使用Spring3.0.x,它们有自己的DataSourceTransactionManager (都有不同的名称)。它们都通过包含spring配置的“主”webapp包含在上下文中。

代码语言:javascript
复制
<import resource="classpath:spring-config-componentName.xml" />

在每个Spring信任的组件中,我使用声明式事务管理,通过

代码语言:javascript
复制
<tx:annotation-driven transaction-manager="transactionManager_componentName" />

对于每个应该是事务性的方法,我添加了一个如下所示的注释:

代码语言:javascript
复制
@Transactional(propagation=Propagation.REQUIRES_NEW, value="transactionManager_componentName")

我遇到的问题是,我发现只创建了一个TransactionInterceptor,它引用了一个transactionManagers,但没有引用组件本身。有办法处理这事吗?喜欢将TransactionInterceptor指定为bean,然后在@Transactional注释中引用它吗?

我认为通过在每个组件中指定一个TransactionProxyFactoryBean并通过xml进行声明性传输管理是有可能的。但这是我想避免的。

如Spring (10.5.6.2多个事务管理器具有@ Transaction)中所描述的,建议的方法不起作用。

EN

回答 1

Stack Overflow用户

发布于 2012-02-17 09:42:20

最后,我发现了问题所在,我不得不说,它的工作原理是在spring文档中描述的。如果您在Spring容器中使用多个TransactionManager,并且使用的是@Transaction,那么如果您将TransactionManager指定为这样的话,它会执行而不是的任务:

代码语言:javascript
复制
<tx:annotation-driven transaction-manager="transactionManager_componentName" />

要删除TransactionManager规范并使用如下配置,只需执行以下所有操作:

代码语言:javascript
复制
<!-- ========== 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>

对于您希望在事务中运行的方法,只需按如下方式指定:

代码语言:javascript
复制
@Transactional(value="component1")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9266595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档