栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

seata整合多数据源

Java 更新时间:发布时间: 百科书网 趣学号

seata整合多数据源
  • 一、背景
  • 二、整合步骤
    • 1、seata server的搭建
    • 2、引入数据源切换组件
    • 3、引入seata组件
    • 4、配置多数据源
    • 5、关闭seata自己默认的数据源代理
    • 6、配置seata事物分组
    • 7、业务库创建undo_log表
    • 8、xid的传递
    • 9、代码中使用数据源切换
    • 10、业务方法开启分布式事物
  • 三、注意事项
  • 四、完整代码

一、背景

在这篇文章中,我们使用Seata整合一下多数据源的场景。多数据源切换的功能我们使用dynamic-datasource-spring-boot-starter来完成,并且这个组件还可以和Seata进行整合,实现数据源的代理。

此篇文章 依赖之前的 seata整合nacos完成分布式的部署

二、整合步骤 1、seata server的搭建

seata整合nacos完成分布式的部署

2、引入数据源切换组件

    com.baomidou
    dynamic-datasource-spring-boot-starter
    3.4.1

3、引入seata组件

   io.seata
    seata-spring-boot-starter
    1.4.2



    com.alibaba.nacos
    nacos-client
    1.3.2


4、配置多数据源
  1. 此处配置2个数据源,account和order并且设置和 seata进行整合
  2. 需要注册此切面的位置
  3. 设置默认的数据源
spring:
  datasource:
    dynamic:
      # 启用 seata
      seata: true
      # 模式是 at 模式
      seata-mode: at
      # 主数据源是 account 数据源
      primary: account
      # 不启用严格模式
      strict: false
      # 配置数据源切面的位置
      order: "-2147483648"
      # 每一个数据源
      datasource:
        # account 库的数据源
        account:
          url: jdbc:mysql://127.0.0.1:3306/seata_account?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        # 订单库的数据源
        order:
          url: jdbc:mysql://127.0.0.1:3306/seata_order?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
5、关闭seata自己默认的数据源代理
seata:
  # 是否自动开启数据源代理
  enable-auto-data-source-proxy: false
6、配置seata事物分组
seata:
  enabled: true
  tx-service-group: tx_multiple_datasource_group 
  # 该分组需要在seata server的配置中心中存在,即在 seata server 的配置中心中需要存在service.vgroupMapping.tx_multiple_datasource_group 配置项
7、业务库创建undo_log表
CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB COMMENT ='AT transaction mode undo table';
8、xid的传递

9、代码中使用数据源切换

10、业务方法开启分布式事物


到此就整合完了。

三、注意事项

1、开启事物,是需要获取一个数据库连接的,那么我们的 @DS 注解切换数据源必须要在 @Transaction 之前执行。

四、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/seata/seata-multiple-datasource

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/274771.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号