use*_*526 7 spring transactions
我有两个事务管理器在两个单独的spring xml文件中定义,并且它们都加载到spring上下文中
文件一
<tx:annotation-driven transaction-manager="transactionManager1"/>
<bean id="transactionManager1"
class="org.springframework.jdbc.DataSourceTransactionManager">
...
</bean>
Run Code Online (Sandbox Code Playgroud)
文件二
<tx:annotation-driven transaction-manager="transactionManager2"/>
<bean id="transactionManager2"
class="org.springframework.jdbc.DataSourceTransactionManager">
...
</bean>
Run Code Online (Sandbox Code Playgroud)
如果我没有为下面的服务指出任何限定符,那么将使用哪个事务管理器spring.
public class TransactionalService {
@Transactional
public void setSomething(String name) { ... }
@Transactional
public void doSomething() { ... }
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 15
查看11.5.6使用官方文档中的@Transactional:
您可以省略
transaction-manager属性的<tx:annotation-driven/>标签,如果的bean的名字PlatformTransactionManager要丝具有名称transactionManager.如果PlatformTransactionManager要依赖注入的bean具有任何其他名称,则必须transaction-manager明确使用该属性[...]
由于您的事务管理器都没有命名transactionManager,因此必须指定应使用哪个事务管理器来标记方法@Transactional.
更新:解决您修改过的问题.您可以指定要在@Transactional注释上使用的事务管理器(请参阅:) @Transactional.value():
@Transactional("transactionManager1")
//...
@Transactional("transactionManager2")
//...
Run Code Online (Sandbox Code Playgroud)
但是我发现您当前的设置有几个问题:
您<tx:annotation-driven/>使用不同的事务管理器定义两次.我不认为这样的配置是有效的
没有明确提供事务管理器,应该使用哪一个?
我认为应该解决的解决方案是定义<tx:annotation-driven transaction-manager="transactionManager1"/>一次并@Transactional使用第一个管理器并@Transactional("transactionManager2")使用第二个管理器.或者相反.
| 归档时间: |
|
| 查看次数: |
14001 次 |
| 最近记录: |