Spring Boot多数据源事务:@DSTransactional

文章讲述了在SpringBoot应用中如何使用MyBatis与DynamicDataSource进行事务管理,区分了同一数据源内的事务和跨数据源事务的处理方式,并通过代码示例展示了事务注解的使用和可能出现的问题。
摘要由CSDN通过智能技术生成

dao 层

package com.test.mapper;
 
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
 
//数据源1
@DS("db1")
@Mapper
public interface Test1Dao {
	@Update("update test1 set name = #{name} where id = #{id}")
	void updateById(@Param("id")Integer id, @Param("name")String name);
}
package com.test.mapper;
 
import com.baomidou.dynamic.datasource.annotation.DS;
import com.test.datasources.DataSourceNames;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
 
//数据源2
@DS(“db2”)
@Mapper
public interface Test2Dao {
	@Update("update test2 set name = #{name} where id = #{id}")
	void updateById(@Param("id")Integer id, @Param("name")String name);
}

service层

package com.test.service;
 
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.test.mapper.Test1Dao;
import com.test.mapper.Test2Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
@Service
public class TestService {
 
    @Autowired
    private Test1Dao test1Dao;
    @Autowired
    private Test2Dao test2Dao;
    /**
     * 同一个数据源中的事务,都是数据源2
     * 这里用的是spring的事务注解Transactional
     * 这里必须加上注解多数据源注解@DS("db2"),否则使用的是默认数据源
     */
    @DS("db2")
    @Transactional
    public void theSame() {
        test2Dao.updateById(2,"第一次修改");
        test2Dao.updateById(2,"第二次修改");
        //这里报错回滚
        int i = 1/0;
    }
 
    /**
     * 多数据源中的事务,同时使用数据源1、2
     * 如果这里用spring的事务注解Transactional,那么使用的是默认数据源
     * 这里不需要加上注解@DS
     */
    @DSTransactional
    public void notAlike() {
        test1Dao.updateById(1,"第一次修改");
        test2Dao.updateById(2,"第二次修改");
        //这里报错回滚
        int i = 1/0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值