0


Spring Boot多数据源事务@DSTransactional的使用

项目场景:

  1. Spring Boot

集成com.baomidou,引入dynamic-datasource依赖,实现多数据源,这里说下事务问题:

1、一个方法中使用同一个数据源;

2、一个方法中使用了多个数据源;


解决方案:

这里把dao、service列出来

1、dao层

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

2、service层

  1. package com.test.service;
  2. import com.baomidou.dynamic.datasource.annotation.DS;
  3. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  4. import com.test.mapper.Test1Dao;
  5. import com.test.mapper.Test2Dao;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. @Service
  10. public class TestService {
  11. @Autowired
  12. private Test1Dao test1Dao;
  13. @Autowired
  14. private Test2Dao test2Dao;
  15. /**
  16. * 同一个数据源中的事务,都是数据源2
  17. * 这里用的是spring的事务注解Transactional
  18. * 这里必须加上注解多数据源注解@DS("db2"),否则使用的是默认数据源
  19. */
  20. @DS("db2")
  21. @Transactional
  22. public void theSame() {
  23. test2Dao.updateById(2,"第一次修改");
  24. test2Dao.updateById(2,"第二次修改");
  25. //这里报错回滚
  26. int i = 1/0;
  27. }
  28. /**
  29. * 多数据源中的事务,同时使用数据源1、2
  30. * 如果这里用spring的事务注解Transactional,那么使用的是默认数据源
  31. * 这里不需要加上注解@DS
  32. */
  33. @DSTransactional
  34. public void notAlike() {
  35. test1Dao.updateById(1,"第一次修改");
  36. test2Dao.updateById(2,"第二次修改");
  37. //这里报错回滚
  38. int i = 1/0;
  39. }
  40. }

spring boot实现多数据源:Spring Boot集成Druid实现多数据源的两种方式_涛哥是个大帅比的博客-CSDN博客


本文转载自: https://blog.csdn.net/u011974797/article/details/130148738
版权归原作者 可乐汉堡cola 所有, 如有侵权,请联系我们删除。

“Spring Boot多数据源事务@DSTransactional的使用”的评论:

还没有评论