SpringBoot整合Seata

上一篇 <<<Seata-核心源碼分析
下一篇 >>>Seata與Lcn的區(qū)別


1.事務(wù)協(xié)調(diào)者(TC)啟動

A、創(chuàng)建數(shù)據(jù)庫,并執(zhí)行sql: db_store.sql
B、修改 registry.conf和file.conf配置
Registry.conf支持:file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
file.conf:修改db信息
C、seata-server.sh啟動腳本

2.發(fā)起方TM和參與方RM整合

在關(guān)聯(lián)的數(shù)據(jù)庫里執(zhí)行db_undo_log.sql后在執(zhí)行下面操作

2.1 引入jar包依賴

<dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-seata</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

2.2 配置修改

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 10.211.55.16:8848
        #feign客戶端的命名必須使用中劃線,不能使用下劃線
    refresh:
      enabled: false
      #seata配置
    alibaba:
      seata:
        tx-service-group: my_test_tx_group
  application:
    name: seata-user-service
  datasource:
    url: jdbc:mysql://localhost:3306/jarye?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

拷貝registry.conf和file.conf到配置文件地方
其中tx-service-group的配置要和file.conf里的vgroup_mapping名稱一致

service { 
  vgroup_mapping.my_test_tx_group = "default" 
  default.grouplist = "127.0.0.1:8091"
}

2.3 剔除默認(rèn)數(shù)據(jù)源

//自定義配置
@Configuration
public class DataSourceProxyConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return new DruidDataSource();
    }

    @Bean
    public DataSourceProxy dataSourceProxy(DataSource dataSource) {
        return new DataSourceProxy(dataSource);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSourceProxy);
        sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
        return sqlSessionFactoryBean.getObject();
    }
}
啟動的地方剔除默認(rèn)的數(shù)據(jù)源加載
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@MapperScan("com.jgspx.mapper")
public class SeataUserApp {
    public static void main(String[] args) {
        SpringApplication.run(SeataUserApp.class);
    }
}

2.4 注解使用

只要在發(fā)起方增加注解,參與方不用任何注解

@GlobalTransactional
@GetMapping("/orderToMember")
public String orderToMember(Long userId) {
    orderMapper.insertUser(userId+"");
    String result = userServiceFeign.getUser(userId);
    return "我是訂單服務(wù),調(diào)用會員服務(wù)接口返回結(jié)果:" + result;
}

2.5 通過日志來驗(yàn)證

當(dāng)出現(xiàn)異?;虺瑫r,日志信息:
Branch Rollbacked result: PhaseTwo_Rollbacked
當(dāng)執(zhí)行成功,日志信息:
Branch commit result: PhaseTwo_Committed


推薦閱讀:
<<<分布式事務(wù)產(chǎn)生的背景
<<<解決分布式事務(wù)的核心思路
<<<柔性事務(wù)和剛性事務(wù)(ACID)
<<<CAP理論簡單概況
<<<Base理論核心思想
<<<一致性協(xié)議--XA接口
<<<一致性協(xié)議--Jta規(guī)范
<<<一致性協(xié)議--2PC提交協(xié)議
<<<一致性協(xié)議--3PC提交協(xié)議
<<<2PC與3PC協(xié)議的提交區(qū)別
<<<主流的分布式事務(wù)解決框架
<<<LCN-框架介紹
<<<LCN-實(shí)現(xiàn)原理剖析
<<<LCN-事務(wù)協(xié)調(diào)者(TM)安裝啟動
<<<SpringBoot整合LCN
<<<LCN-核心源碼分析
<<<LCN-集群模式介紹
<<<Seata-框架介紹
<<<Seata原理實(shí)現(xiàn)/執(zhí)行流程/生命周期
<<<Seata-TM執(zhí)行時突然宕機(jī)了會造成什么問題
<<<Seata-核心源碼分析
<<<Seata與Lcn的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容