fast-family框架 fast-family-datasource多数据源以及整合xa分布式事务使用案例

介绍

fast-family-datasource是fast-family框架中多数据源处理模块,提供XA分布式事务处理,注解指定数据源,简单的配置文件指向即可完成多数据源及事务管理。

注意:暂时只支持druid数据源

使用案例

引入模块:

<dependency>
   <groupId>com.github.fast-family</groupId>
   <artifactId>fast-family-datasource</artifactId>
   <version>0.1.0</version>
</dependency>

注意:暂时未发布到中央仓库,需下载代码

不带XA事务配置:

fast:
  family:
    type: com.alibaba.druid.pool.DruidDataSource
    datasource:
      master:
        druid:
          username: root
          password: root
          url: jdbc:mysql://localhost:3306/master-db?useUnicode=true&characterEncoding=utf8
          driverClassName: com.mysql.jdbc.Driver
        atomikos:
          uniqueResourceName: master-db
      slave_0:
        druid:
          username: root
          password: root
          url: jdbc:mysql://localhost:3306/slave-db?useUnicode=true&characterEncoding=utf8
          driverClassName: com.mysql.jdbc.Driver
        atomikos:
          uniqueResourceName: slave-db

携带XA事务配置:

fast:
  family:
    type: com.alibaba.druid.pool.xa.DruidXADataSource
    datasource:
      master:
        druid:
          username: root
          password: root
          url: jdbc:mysql://localhost:3306/master-db?useUnicode=true&characterEncoding=utf8
          driverClassName: com.mysql.jdbc.Driver
        atomikos:
          uniqueResourceName: master-db
      slave_0:
        druid:
          username: root
          password: root
          url: jdbc:mysql://localhost:3306/slave-db?useUnicode=true&characterEncoding=utf8
          driverClassName: com.mysql.jdbc.Driver
        atomikos:
          uniqueResourceName: slave-db

示例代码:

通过使用DataSourceAnnotation注解来指定对应的数据源名称

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;


    @DataSourceAnnotation(name = "slave_0")
    @Override
    public List<User> selectAlldb1() {
        return userDao.selectAll();
    }

    @DataSourceAnnotation(name = "master")
    @Override
    public List<User> selectAlldb2() {
        return userDao.selectAll();
    }

    @DataSourceAnnotation(name = "slave_0")
    @Override
    public void savedb1() {
        if (true){
            throw new RuntimeException("异常了");
        }
    }

    @DataSourceAnnotation(name = "master")
    @Override
    public void savedb2() {
        User user = new User();
        user.setPassword("1231");
        user.setUsername("1231232");
        userDao.insert(user);
    }
}

测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class FastFamilyDatasourceExampleApplicationTests {
    

    @Autowired
    private UserService userService;

    @Test
    public void contextLoads() {****
        System.out.println("查询数据大小:"+userService.selectAlldb1().size());
        System.out.println("查询数据大小:"+userService.selectAlldb2().size());
    }


    @Transactional
    @Test
    public void saveTest(){
        userService.savedb2();
        userService.savedb1();
    }

}

测试效果:

不带事务:

QQ图片20181015165603.png

QQ图片20181015165539.png

带XA事务:

QQ图片20181015165631.png

QQ图片20181015165644.png

如果您对此框架感兴趣或者想获取最新进度信息可以加qq群:390295286
github地址:https://github.com/fast-family/fast-family-master 欢迎star fork
github example地址: https://github.com/fast-family/fast-family-example

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,151评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,133评论 19 139
  • 作为程序猿, 难免会有需要将一些效果或者制作一些教程给别人分享的时候, 掌握视频录制技巧显得尤为重要这里给大家分...
    Listen_黎森阅读 13,962评论 10 27
  • “参见女王” “平身” 女王向四周看了看,“咦!怎么又不见公主了呢?” “女王,公主带着她的朋友们又去玩了。还带走...
    酱紫lang阅读 2,372评论 0 0

友情链接更多精彩内容