Spring配置多数据源多事物配置详解

本文详细介绍了在Spring框架中如何配置和使用事务管理器,特别是在涉及多个数据源的场景下,通过自定义注解和限定符实现精确的事务控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际应用场景有个项目在配置Spring事务时,使用了@Transactional注解,但这个项目使用了多个数据源,而事务注解只对默认的是第一个事务
1)定义与事务管理器对应的事务通知 
2)配置需要拦截的方法调用切面 
3)将切入点连接到相应的事务
在Spring2.5之前,@Transactional注解确实不支持多数据源,但是Spring3为其增加了value属性配置,可以指定当前事务通知对应的事务管理器
1、配置事务注解驱动、每个数据源对应的事务管理器,并定义“限定符”


<!-- 开启注解式事务扫描 -->
<tx:annotation-driven/>
 <bean id="transactionManager1" class="org.springframework.jdbc.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource1">
    <qualifier value="transmanage1"/>
  </bean>
<bean id="transactionManager2" class="org.springframework.jdbc.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource2">
    <qualifier value="transmanage2"/>
  </bean>
2、在需要事务的地方,指定“限定符”
public class TransactionalService {

  @Transactional("transmanage1")
    public void setSomething(String name) { ... }

    @Transactional("transmanage2")
    public void doSomething() { ... }
  }


3、如果不指定“限定符”,将默认使用“transationManager”命名对应的事务管理器
在配置文件中,默认情况下,<tx:annotation-driven>会自动使用名称为transactionManager的事务管理器。所以,如果定义的事务管理器名称为transactionManager,那么就可以直接使用<tx:annotation-driven/>

@Transactional的属性


这里写图片描述
配置优化
可以自定义一个绑定到特定事务管理器的注解,然后直接使用这个自定义的注解进行标识:
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("transmanage1")
public @interface CustomerTransactional {
}
在Service代码中使用:
...
//使用名为transmanage1的事务管理器
@CustomerTransactional
public void addTest(String str){


}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值