范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

分布式事务实践(SeataSpringBoot)

  #头条创作挑战赛#版本:  Springboot:2.2.0  SpringCloud: 2020.0.3  Seata: 1.4
  本文章demo地址:https://gitee.com/TZWw/springboot-nacos-seata14  1.下载seata
  1)地址:http://seata.io/zh-cn/blog/download.html
  2)在conf文件夹修改file.conf文件
  3)向本地数据库导入seata需要的表 创建名字为seata的数据库 新建表branch_table、global_table、lock_table CREATE TABLE `branch_table` (   `branch_id` bigint NOT NULL,   `xid` varchar(128) NOT NULL,   `transaction_id` bigint DEFAULT NULL,   `resource_group_id` varchar(32) DEFAULT NULL,   `resource_id` varchar(256) DEFAULT NULL,   `lock_key` varchar(128) DEFAULT NULL,   `branch_type` varchar(8) DEFAULT NULL,   `status` tinyint DEFAULT NULL,   `client_id` varchar(64) DEFAULT NULL,   `application_data` varchar(2000) DEFAULT NULL,   `gmt_create` datetime DEFAULT NULL,   `gmt_modified` datetime DEFAULT NULL,   PRIMARY KEY (`branch_id`),   KEY `idx_xid` (`xid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;CREATE TABLE `global_table` (   `xid` varchar(128) NOT NULL,   `transaction_id` bigint DEFAULT NULL,   `status` tinyint NOT NULL,   `application_id` varchar(32) DEFAULT NULL,   `transaction_service_group` varchar(32) DEFAULT NULL,   `transaction_name` varchar(128) DEFAULT NULL,   `timeout` int DEFAULT NULL,   `begin_time` bigint DEFAULT NULL,   `application_data` varchar(2000) DEFAULT NULL,   `gmt_create` datetime DEFAULT NULL,   `gmt_modified` datetime DEFAULT NULL,   PRIMARY KEY (`xid`),   KEY `idx_gmt_modified_status` (`gmt_modified`,`status`),   KEY `idx_transaction_id` (`transaction_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;CREATE TABLE `lock_table` (   `row_key` varchar(128) NOT NULL,   `xid` varchar(96) DEFAULT NULL,   `transaction_id` mediumtext,   `branch_id` mediumtext,   `resource_id` varchar(256) DEFAULT NULL,   `table_name` varchar(32) DEFAULT NULL,   `pk` varchar(36) DEFAULT NULL,   `gmt_create` datetime DEFAULT NULL,   `gmt_modified` datetime DEFAULT NULL,   PRIMARY KEY (`row_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
  4)修改registry.conf文件
  5)将seata配置信息添加到nacos配置中心 1.启动本地的nacos服务
  2.下载config.txt和nacos-config.sh两个文件
  https://github.com/seata/seata/blob/develop/script/config-center/config.txt
  https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
  3.然后执行nacos-config.sh脚本
  4.查看nacos中添加成功的配置
  6)启动seata
  进入bin目录下,执行 ./seata-server.sh 出现下图即为启动成功
  2. 服务间调用(服务one调用服务two)
  1) 创建one和two数据库,每个数据库都必须包含undo_log表 one数据库 CREATE TABLE `count` (   `id` int NOT NULL AUTO_INCREMENT,   `count` int DEFAULT NULL COMMENT "库存",   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb3;  CREATE TABLE `undo_log` (   `id` bigint NOT NULL AUTO_INCREMENT,   `branch_id` bigint NOT NULL,   `xid` varchar(100) NOT NULL,   `context` varchar(128) NOT NULL,   `rollback_info` longblob NOT NULL,   `log_status` int NOT NULL,   `log_created` datetime NOT NULL,   `log_modified` datetime NOT NULL,   `ext` varchar(100) DEFAULT NULL,   PRIMARY KEY (`id`),   UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb3;two数据库 CREATE TABLE `order` (   `id` int NOT NULL AUTO_INCREMENT,   `order_count` int DEFAULT NULL,   `product_id` bigint DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3;  CREATE TABLE `undo_log` (   `id` bigint NOT NULL AUTO_INCREMENT,   `branch_id` bigint NOT NULL,   `xid` varchar(100) NOT NULL,   `context` varchar(128) NOT NULL,   `rollback_info` longblob NOT NULL,   `log_status` int NOT NULL,   `log_created` datetime NOT NULL,   `log_modified` datetime NOT NULL,   `ext` varchar(100) DEFAULT NULL,   PRIMARY KEY (`id`),   UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;
  创建one和two服务
  此处省略创建服务过程…
  maven父工程依赖  <?xml version="1.0" encoding="UTF-8"?>      4.0.0     pom              serviceone         servicetwo          servicecommon                   org.springframework.boot         spring-boot-starter-parent         2.5.5                    com.example     demo2     0.0.1-SNAPSHOT     demo2     Demo project for Spring Boot              1.8         2020.0.3         2021.1                                                 com.alibaba                 druid                 1.1.9                                           org.springframework.boot                 spring-boot-starter-test                 2.3.3.RELEASE                 test                                                        org.mybatis.spring.boot                 mybatis-spring-boot-starter                 2.2.0                                           org.springframework.cloud                 spring-cloud-context                 2.2.3.RELEASE                                            org.springframework.cloud                 spring-cloud-dependencies                 ${spring-cloud.version}                 pom                 import                                            com.alibaba.cloud                 spring-cloud-alibaba-dependencies                 2021.1                 pom                 import                                            mysql                 mysql-connector-java                 8.0.26                 pom                 import                                                         org.springframework.boot                 spring-boot-starter-log4j                 1.3.8.RELEASE                                                                         org.springframework.boot                 spring-boot-maven-plugin                                                                                            org.projectlombok                             lombok                                                                                            one服务:
  bootstrap.yml文件  # Spring spring:   application:     # 应用名称     name: service-one   profiles:     # 环境配置     active: dev   main:     allow-bean-definition-overriding: true   cloud:     nacos:       discovery:         # 服务注册地址         server-addr: localhost:8848 #        namespace: 3d25ad9f-6b5a-4f1a-a4a7-0bbba90a00fa         group: SEATA_GROUP       config:         # 配置中心地址         server-addr: localhost:8848         namespace: 8221aa53-c648-4c6a-8a41-0c3a685ba58e #        # 配置文件格式         file-extension: yml   #        # 共享配置 #        shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # seata:   tx-service-group: my_test_tx_group   registry:     type: nacos     nacos:       server-addr: ${spring.cloud.nacos.discovery.server-addr}       group: ${spring.cloud.nacos.discovery.group}   #      namespace: 6c990727-93b2-4081-a8c6-6b015c56eda2   config:     type: nacos     nacos:       server-addr: ${spring.cloud.nacos.discovery.server-addr}       group: ${spring.cloud.nacos.discovery.group} #      namespace: 6db428d4-e7a3-4dd3-be02-283960e0e704   service:     vgroup-mapping:       my_test_tx_group: default
  nacos中one的配置(service-one-dev.yml):  # Spring spring:   datasource:     driver-class-name: com.mysql.cj.jdbc.Driver     url: jdbc:mysql://localhost:3306/service-one?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8     username: root     password: 123456789  server:   port: 8085  # Mybatis配置 mybatis:     # 配置mapper的扫描,找到所有的mapper.xml映射文件     mapperLocations: classpath:mapper/**/*.xml  httpclient:   enabled: true
  one服务依赖                        org.springframework.boot             spring-boot-starter-web                                org.springframework.boot             spring-boot-starter-test             test                               org.mybatis.spring.boot             mybatis-spring-boot-starter                                         com.alibaba.cloud             spring-cloud-starter-alibaba-nacos-discovery                                                 com.alibaba.cloud             spring-cloud-starter-alibaba-nacos-config                                org.springframework.cloud             spring-cloud-loadbalancer                                        org.springframework.cloud             spring-cloud-starter-bootstrap                                        org.springframework.cloud             spring-cloud-context             3.0.2                                mysql             mysql-connector-java                                                 org.springframework.cloud             spring-cloud-starter-openfeign             2.2.3.RELEASE                               cn.hutool             hutool-all             5.6.6                                com.alibaba             druid-spring-boot-starter             1.2.6                                org.springframework.boot             spring-boot-starter-log4j                                com.alibaba.cloud             spring-cloud-starter-alibaba-seata                                        io.github.openfeign             feign-httpclient              
  controller :      @GetMapping("/insertOpt")     public CommonResult insertOpt() {         try {             countService.insertOpt();             return new CommonResult(true, "成功", null);         } catch (Exception e) {             return new CommonResult(false, "失败", null);         }     }
  serviceImpl   	@Override     @GlobalTransactional(rollbackFor = Exception.class, name = "insertOpt")     public CommonResult insertOpt() {         Count count = new Count();         count.setCount(12);         int insert = this.countDao.insert(count);         if (insert == 0) {             throw new RuntimeException("first失败");         }         Order order = new Order();         order.setOrderCount(12);         order.setProductId(12L);         CommonResult commonResult = remoteServiceTwo.insertOne(order);         if (!commonResult.getBool()){             throw new RuntimeException("操作远程失败!");         }         Map map = new HashMap<>(16);         map.put("count", insert);         map.put("order", commonResult);         System.err.println("map===="+ map.toString());         return new CommonResult(true, "成功", map);     }
  feign请求  @FeignClient(value = "service-two") public interface RemoteServiceTwo {      @PostMapping("/order/insertOne")     public CommonResult insertOne(Order order);  }two服务
  bootstrap.yml  # Spring spring:   application:     # 应用名称     name: service-two   profiles:     # 环境配置     active: dev   main:     allow-bean-definition-overriding: true   cloud:     nacos:       discovery:         # 服务注册地址         server-addr: localhost:8848 #        namespace: 3d25ad9f-6b5a-4f1a-a4a7-0bbba90a00fa         group: SEATA_GROUP       config:         # 配置中心地址         server-addr: localhost:8848         namespace: 8221aa53-c648-4c6a-8a41-0c3a685ba58e #        # 配置文件格式         file-extension: yml #        # 共享配置 #        shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}   seata:   tx-service-group: my_test_tx_group   registry:     type: nacos     nacos:       server-addr: ${spring.cloud.nacos.discovery.server-addr}       group: ${spring.cloud.nacos.discovery.group}   #      namespace: 6c990727-93b2-4081-a8c6-6b015c56eda2   config:     type: nacos     nacos:       server-addr: ${spring.cloud.nacos.discovery.server-addr}       group: ${spring.cloud.nacos.discovery.group}   service:     vgroup-mapping:       my_test_tx_group: default
  pom.xml 依赖                            org.springframework.boot             spring-boot-starter-web                                org.springframework.boot             spring-boot-starter-test             test                               org.mybatis.spring.boot             mybatis-spring-boot-starter                                         com.alibaba.cloud             spring-cloud-starter-alibaba-nacos-discovery                                                 com.alibaba.cloud             spring-cloud-starter-alibaba-nacos-config                                org.springframework.cloud             spring-cloud-loadbalancer                                        org.springframework.cloud             spring-cloud-starter-bootstrap                                           org.springframework.cloud             spring-cloud-context             3.0.2                                mysql             mysql-connector-java                                                 org.springframework.cloud             spring-cloud-starter-openfeign             2.2.3.RELEASE                               cn.hutool             hutool-all             5.6.6                                com.example             servicecommon             0.0.1-SNAPSHOT                                com.alibaba             druid-spring-boot-starter             1.2.6                                         org.springframework.boot             spring-boot-starter-log4j                                com.alibaba.cloud             spring-cloud-starter-alibaba-seata                
  nacos中two服务的配置service-two-dev.yml  # Spring spring:   datasource:     driver-class-name: com.mysql.cj.jdbc.Driver     url: jdbc:mysql://localhost:3306/service-two?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8     username: root     password: 123456789  server:   port: 8086  # Mybatis配置 mybatis:     # 配置mapper的扫描,找到所有的mapper.xml映射文件     mapperLocations: classpath:mapper/**/*.xml  # 我使用的这个版本这一步可以忽略 httpclient:   enabled: true
  two服务controller      @PostMapping("insertOne")     public CommonResult selectOne(@RequestBody Order order) {         try {             this.orderService.insert(order);             return new CommonResult(true, "成功", null);         } catch (Exception e) {             StaticLog.error("失败:======{}", e);             return new CommonResult(false, "失败", null);         }     }
  serviceImpl      /**      * 新增数据      *      * @param order 实例对象      * @return 实例对象      */     @Override     public Order insert(Order order) {         // int a = 1/0;  // 此处是为了出现错误,看seata是否会回滚         this.orderDao.insert(order);         return order;     }3. 查看结果插入成功操作
  浏览器操作
  serviceone的日志
  servicetwo日志
  数据库结果-插入成功 (清空数据库进行插入失败操作)
  插入失败操作 1) 插入失败,进行回滚---在servicetwo业务代码上添加一个报错代码
  浏览器操作
  serviceone 日志(进行了回滚)
  servicetwo 日志
  数据库数据
  4.成功
  我是Tz,想把我遇到的问题告诉你

羽毛球世界排名出炉!中国队拿到一个第一,男单男双未来或拖后腿2022赛季,世界羽毛球赛事即将战火重燃,世界羽联也正式公布了5个单项的世界排名。中国队在女双项目上拿到第一混双分列23位女单位列第3,而在男单和男双项目上,已经完全失去了竞争力。中国与冬奥会的42年,太多第一次值得铭记,自豪感动油然而生1980年美国普莱西德湖冬奥会上,中国代表团第一次正式出现,此时的冬奥会已经举办了13届,长达56年的等待终于看到东方巨人的身影。为了冬奥会的第一块奖牌,中国的运动健儿们足足奋战了SensorTower11月中国手游发行商全球收入排行榜腾讯依然霸榜IT之家12月7日消息,SensorTower平台最新数据显示,2021年11月中国手游发行商在全球AppStore和GooglePlay的收入排名中,腾讯网易米哈游是收入最高的三孙铱坐月子花了30万,10元的冲洗器是焦点,每天都绑束腹带睡觉作家张德芬说过爱自己,是一切快乐的根源。坐月子,是大部分女人都会经历的一道坎,也是女人们改变身体的绝佳机会。演员孙铱在1月13日顺产生下了一个儿子,小名为豆苗。孙铱公开了自己的顺产103105,火箭遭15分逆转!伍德两双,对手大当家22412绝杀1月22日上午11点,NBA常规赛,火箭客场对阵勇士。如今的火勇大战,已经彻底变了模样。火箭成为垫底的弱旅,勇士则是经过一二个赛季的蛰伏期后,彻底蜕变,尤其在克莱汤普森复出之后,球371011!哈登隔扣单节12分霸气回暖,欧文末节15分戏耍对手北京时间1月22日,NBA常规赛篮网VS马刺!本场比赛最终篮网117102击败马刺,上半场球队打得不是很好,但下半场随着篮网双核齐爆发米尔斯的状态复苏,篮网锁定了胜局!当哈登欧文均杨幂被央视点名!这次大幂幂真的火了,下阶段热点又到她身上了杨幂被央视点名!当我看到这个消息的时候,我心里一凉!看来娱乐圈确实是个是非之地,只要央视一出手,该凉的凉,总之必然是重大事件。众所周知,央视点名,几乎上是点一个凉一个,就跟那卤水点LOL手游,教你化身上单折磨王英雄联盟手游已经上线国服,无论是端游还是手游,上单这个位置,一直都是展现玩家个人实力最好的舞台。国服上线手游之后,上单四姐妹加上诺手一直都是BOSS般的存在,滚雪球能力极强,而手游拳王霍利菲尔德之子点数击败5胜4负1平对手,继续保持全胜战绩在美国大西洋城结束的一场6回合超次中量级对决中,前4度世界重量级拳王伊万德霍利菲尔德之子埃文霍利菲尔德,在与不入流的克里斯罗林斯交锋中,取得了点数完胜,迎来了2022年的开门红。在万字解读Telegram发家史PavelDurov如何变成Facebook反抗者钛媒体注本文来自readthegeneralist,原文作者TheGeneralist创始人兼主编MarioGabriele,Odaily星球日报译者Moni内容概述1Telegr重磅炸弹!3月1日起不能用个人收款码,小微商家该怎么办?重磅炸弹,今年3月1日起,微信支付宝个人收款码将不能用于经营收款。为什么向微信支付宝下手?以后不能用个人收款码,街边小商贩实体小微商家怎么办?下面就由小博跟大家深入聊聊这块。013
华为数智临平挂牌,多所高校项目合作签约上市企业21家培育未来工厂4家集聚优质工程师1。1万余名人才资源总量突破20万人临平区设区一年多来,成绩单还不错!筑巢引凤聚才,千亿级新引擎25日,临平区正式启动1N系列活动中的1精彩回顾!本源量子携手科技袁人带你走进量子计算5月21日,全国科技活动周暨第十八届公众科学日科普直播活动顺利举办。本源量子总经理张辉博士为大家深度解析量子计算相关知识,并携手科技袁人袁岚峰为大家带来一场科普盛宴。本次活动由中国苹果VS华为,不同企业文化助力企业成功文谭长春文华夏基石管理咨询集团首席专家谭长春在苹果工作十年的员工这样评价苹果公司无论对内还是对外,苹果一直坚持创新。追求极致,在行业做到最好是其发展终极目标。也有人比较苹果与微软谷仅1699元,骁龙87012GB256GB,一亿像素顶配旗舰价格再创新低在全球经济低迷的情况下,主流的手机厂商都在降低商品的价格,意图刺激消费者的购买欲,这不,一年一度的618电商节又来了,为了给618冲销量,不少热销的旗舰手机价格都已经跌至新低。但是华为确认已于3月底结束与徕卡的合作,P50或成绝唱昨日小米官方正式官宣与徕卡达成全球影像战略合作,百年传奇影像与创新科技相融合,一起开启移动影像新时代,首款作品将于7月和大家见面。该消息一经公布,有不少用户都在关注这是不是意味着华发展高风险高回报研究的科技政策机制中国网中国发展门户网讯科学技术(生产力)之变(即新一轮科技革命与产业变革)是当今世界正经历的百年未有之大变局的加速器和主要变量。学科交叉融合渗透和高新技术集群式发展加速推动了科技创Q1全球NAND闪存营收为179。2亿美元2022年4月国内市场手机出货量同比下降34。2每周产业数据汇总本周有哪些值得关注的数据及榜单呢?工信部我国5G移动电话用户达4。13亿户,5G基站数达161。5万个工信部对外公布的2022年14月份通信业经济运行情况中指出,5G移动电话用户快跌至2599元,12GB256GB5500mAh,2K屏旗舰售价更亲民了关注数码圈的都知道,小米手机在性价比方面是出了名的优秀,近些年来,尽管也推出了不少售价高昂的产品,当在价格相同的情况下,往往能够做到同价高配,尤其是子品牌Redmi旗下的产品,往往法网男单第三轮德约科维奇30贝德内携8连胜连赢19盘进十六强直播吧5月27日讯2022赛季第二项大满贯赛事法国网球公开赛,在法国巴黎罗兰加洛斯进入到了正赛第六个比赛日的争夺。卫冕冠军赛会头号种子德约科维奇仅耗时1小时46分钟,就以63636回来了!一夜之间全回来了!铁扎艾灵顿重返湖人!还有更劲爆的北京时间8月3日本来今天想跟大伙聊奥运比赛的没想到啊NBA自由市场开启了好家伙简直太刺激太劲爆了,特别是湖人队回来了,全都回来了!不算上威少自由市场开启后湖人队第一枪瞄准了阿里扎据WTT布达佩斯大满贯7月举办来源新华网新华社北京5月26日电世界乒乓球职业大联盟(WTT)26日宣布,WTT大满贯赛事第二站WTT布达佩斯大满贯将于7月举行。WTT还公布了今年下半年的多项赛事计划,其中包括8