最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springcloud整合seata的實現(xiàn)代碼

 更新時間:2022年05月20日 15:45:39   作者:huan1993  
這篇文章主要介紹了springcloud整合seata的實現(xiàn)方法,整合步驟通過引入spring-cloud-starter-alibaba-seata?jar包,文中結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

一、背景

上一篇文章中,我們使用Seata整合了SpringBoot,在這篇文章中我們使用Seata整合SpringCloud。同時有了上一篇文章的基礎(chǔ),此處我們簡單實現(xiàn)。

二、項目結(jié)構(gòu)

三、實現(xiàn)功能:

完成用戶下單操作,下單分為調(diào)用 賬戶服務(wù) 扣除余額,調(diào)用訂單服務(wù)創(chuàng)建訂單。

四、項目使用到的技術(shù)

Spring Cloud 、eureka、openfeign、seata 、nacos、druid、mybatis-plus

五、整合步驟

1、引入spring-cloud-starter-alibaba-seata jar包

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <version>2021.1</version>
    <exclusions>
        <exclusion>
            <artifactId>seata-spring-boot-starter</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

參考文檔: https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

2、涉及到的業(yè)務(wù)庫操作

1、業(yè)務(wù)庫需要存在 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';

2、業(yè)務(wù)表主鍵

業(yè)務(wù)表中必須包含單列主鍵,如果存在多列主鍵,則目前只有mysql支持。

3、頁面中自動更新時間戳

業(yè)務(wù)表中最好不要自動更新時間戳,使用手動更新,更新數(shù)據(jù),只更新用到的數(shù)據(jù)。
比如:
表中存在10個字段,當前業(yè)務(wù)只需要更新3個字段,此時我們更新3個字段即可,不要更新10個字段,如果update_time字段是默認更新的,則使用手動更新。

3、開啟數(shù)據(jù)源代理

1、自動配置數(shù)據(jù)源代理

seata:
  enabled: true
  # 是否自動開啟數(shù)據(jù)源代理
  enable-auto-data-source-proxy: true
  # 數(shù)據(jù)源代理模式,使用AT模式
  data-source-proxy-mode: AT

2、手動配置AT模式數(shù)據(jù)源代理

1、配置文件關(guān)閉自動數(shù)據(jù)源代理

seata:
  # 是否自動開啟數(shù)據(jù)源代理
  enable-auto-data-source-proxy: false

2、配置配置數(shù)據(jù)源

AT模式下返回的數(shù)據(jù)源一定需要是 DataSourceProxy

@Bean
    public DataSource dataSourceProxy() {
        // 某一個數(shù)據(jù)源
        XxxDataSource xxxDataSource = new XxxDataSource();
        // 設(shè)置數(shù)據(jù)源的各種配置屬性
        xxxDataSource.setXXX("");
        // 使用 DataSourceProxy 來包裝一下
        return new DataSourceProxy(xxxDataSource);
    }

4、傳遞 xid

在引入了 spring-cloud-starter-alibaba-seata 后,很多都已經(jīng)實現(xiàn)了自動傳遞 xid 。同時在分布式事務(wù)結(jié)束后,需要清除xid的值。

默認實現(xiàn)了 feignrestweb3種方式的 xid的傳遞。

5、事務(wù)分組和seata server對應上

6、注冊中心和配置中心

應用程序中 seata 的配置中心和 注冊中心 需要和 seata server 的保持一致。

7、業(yè)務(wù)方法加上@GlobalTransactional 注解

在需要開啟分布式事務(wù)的方法上加入 @GlobalTransactional 注解,開啟分布式事務(wù)。

public class BusinessServiceImpl implements BusinessService {
    private final OrderService orderService;
    private final AccountClient accountClient;
    @Override
    // 開啟分布式事務(wù)
    @GlobalTransactional(rollbackFor = Exception.class)
    public void createAccountOrder(Integer accountId, Long amount, boolean hasException) {
        System.out.println("xid:" + RootContext.getXID());
        // 1、遠程扣減賬戶余額
        remoteDebit(accountId, amount);
        // 2、下訂單
        orderService.createOrder(accountId, amount);
        if (hasException) {
            throw new RuntimeException("發(fā)生了異常,分布式事物需要會滾");
        }
    }
    private void remoteDebit(Integer accountId, Long amount) {
        String result = accountClient.debit(accountId, amount);
        log.info("遠程扣減庫存結(jié)果:[{}]", result);
    }
}

六、演示

分布式事務(wù)發(fā)生異常,事務(wù)回滾

七、完整代碼

https://gitee.com/huan1993/spring-cloud-parent/tree/master/seata/seata-springcloud-mybatis-plus

八、參考文檔

1、新人文檔

2、seata常見問題

到此這篇關(guān)于springcloud整合seata的文章就介紹到這了,更多相關(guān)springcloud整合seata內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文教會你使用jmap和MAT進行堆內(nèi)存溢出分析

    一文教會你使用jmap和MAT進行堆內(nèi)存溢出分析

    本文介紹關(guān)于jmap和MAT的使用來進行堆內(nèi)存溢出分析,因為這個內(nèi)存溢出是我們手動構(gòu)造出來的,查找比較簡單,真的到了生產(chǎn)上面需要我們仔細排除
    2021-09-09
  • Java發(fā)送http請求的示例(get與post方法請求)

    Java發(fā)送http請求的示例(get與post方法請求)

    這篇文章主要介紹了Java發(fā)送http請求的示例(get與post方法請求),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)

    java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)

    這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Spring整合MyBatis圖示過程解析

    Spring整合MyBatis圖示過程解析

    這篇文章主要介紹了Spring整合MyBatis圖示過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Spring的@RequestParam對象綁定方式

    Spring的@RequestParam對象綁定方式

    這篇文章主要介紹了Spring的@RequestParam對象綁定方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java中對象轉(zhuǎn)json字符串的幾種常用方式舉例

    java中對象轉(zhuǎn)json字符串的幾種常用方式舉例

    這篇文章主要給大家介紹了關(guān)于java中對象轉(zhuǎn)json字符串的幾種常用方式,在Java中可以使用許多庫將對象轉(zhuǎn)換為JSON字符串,其中最常用的是Jackson和Gson,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • Java封裝好的mail包發(fā)送電子郵件的類

    Java封裝好的mail包發(fā)送電子郵件的類

    本文給大家分享了2個java封裝好的mail包發(fā)送電子郵件的類,并附上使用方法,小伙伴們可以根據(jù)自己的需求自由選擇。
    2016-01-01
  • spring security如何擴展自定義登錄

    spring security如何擴展自定義登錄

    本文詳細介紹了Spring Security的認證原理和具體實現(xiàn),認證原理基于過濾器鏈,通過驗證用戶憑證和構(gòu)建認證對象來保護應用程序資源,實現(xiàn)自定義認證功能的步驟包括創(chuàng)建自定義認證提供程序、實現(xiàn)UserDetailsService接口以及在配置類中進行相應的配置
    2024-11-11
  • 解決Mybatis映射文件mapper.xml中的注釋問題

    解決Mybatis映射文件mapper.xml中的注釋問題

    這篇文章主要介紹了解決Mybatis映射文件mapper.xml中的注釋問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java 基礎(chǔ)全面講解StringBuffer類的使用

    Java 基礎(chǔ)全面講解StringBuffer類的使用

    當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder類,和String類不同的是,StringBuffer和 StringBuilder類的對象能夠被多次的修改,并且不產(chǎn)生新的未使用對象
    2022-01-01

最新評論

舒兰市| 东港市| 定远县| 民丰县| 昭觉县| 安泽县| 盐边县| 盐源县| 保亭| 荔波县| 黔江区| 阳东县| 文化| 泸溪县| 桃园市| 毕节市| 横峰县| 巴林右旗| 安吉县| 赞皇县| 赞皇县| 仁寿县| 高唐县| 南平市| 柳江县| 滦平县| 朝阳市| 永善县| 克拉玛依市| 宣威市| 辽源市| 鄂托克旗| 金川县| 云和县| 新田县| 张家川| 宁城县| 金门县| 遂川县| 沛县| 张家界市|