欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、背景

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

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

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

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

四、項(xià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ù)庫(kù)操作

1、業(yè)務(wù)庫(kù)需要存在 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è)面中自動(dòng)更新時(shí)間戳

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

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

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

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

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

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

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

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

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

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

4、傳遞 xid

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

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

5、事務(wù)分組和seata server對(duì)應(yīng)上

6、注冊(cè)中心和配置中心

應(yīng)用程序中 seata 的配置中心和 注冊(cè)中心 需要和 seata server 的保持一致。

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

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

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

六、演示

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

七、完整代碼

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

八、參考文檔

1、新人文檔

2、seata常見(jiàn)問(wèn)題

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

相關(guān)文章

  • java 線程鎖詳細(xì)介紹及實(shí)例代碼

    java 線程鎖詳細(xì)介紹及實(shí)例代碼

    這篇文章主要介紹了java 線程鎖詳細(xì)介紹及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • java多線程之wait(),notify(),notifyAll()的詳解分析

    java多線程之wait(),notify(),notifyAll()的詳解分析

    本篇文章是對(duì)java多線程 wait(),notify(),notifyAll()進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Java 實(shí)戰(zhàn)練習(xí)之網(wǎng)上電商項(xiàng)目的實(shí)現(xiàn)

    Java 實(shí)戰(zhàn)練習(xí)之網(wǎng)上電商項(xiàng)目的實(shí)現(xiàn)

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+Springboot+ssm+mysql+maven+redis實(shí)現(xiàn)一個(gè)網(wǎng)上電商項(xiàng)目,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 淺析Java?NIO?直接緩沖區(qū)和非直接緩沖區(qū)

    淺析Java?NIO?直接緩沖區(qū)和非直接緩沖區(qū)

    本篇文章主要為大家介紹了Java?NIO?中直接緩沖區(qū)和非直接緩沖區(qū)的定義以及使用流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 帶你深入概括Java!六、方法和方法重載!(推薦)

    帶你深入概括Java!六、方法和方法重載?。ㄍ扑])

    這篇文章主要介紹了Java方法和方法重載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 面試官:Java中new Object()到底占用幾個(gè)字節(jié)

    面試官:Java中new Object()到底占用幾個(gè)字節(jié)

    這篇文章主要介紹了面試官:Java中new Object()到底占用幾個(gè)字節(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java壓縮文件工具類ZipUtil使用方法代碼示例

    Java壓縮文件工具類ZipUtil使用方法代碼示例

    這篇文章主要介紹了Java壓縮文件工具類ZipUtil使用方法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • spring cloud學(xué)習(xí)入門(mén)之config配置教程

    spring cloud學(xué)習(xí)入門(mén)之config配置教程

    這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)入門(mén)之config配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Java并發(fā)編程之對(duì)象的共享

    Java并發(fā)編程之對(duì)象的共享

    這篇文章主要介紹了Java并發(fā)編程之對(duì)象的共享,介紹如何共享和發(fā)布對(duì)象,使它們被安全地由多個(gè)進(jìn)程訪問(wèn)。需要的小伙伴可以參考一下
    2022-04-04
  • Java添加Word文本水印和圖片水印

    Java添加Word文本水印和圖片水印

    這篇文章主要介紹了Java添加Word文本水印和圖片水印,文章圖文講解的很清晰,有對(duì)于這方面不懂得同學(xué)可以學(xué)習(xí)下
    2021-02-02

最新評(píng)論