1、简介

分布式事务主要解决的问题就是两个模块之间事务回滚的问题,如果用户访问Goods服务,Goods服务通过Feign调用User服务的时候发生了错误,虽然两个服务都添加了事务,但是两个服务是相互隔离的,这样一来Goods服务的操作可以通过是事务回滚,User服务虽然添加了事务,但是会回滚失败,这个时候就需要用到分布式事务来解决这个问题,本章先演示事务回滚失败场景

2、建表

2.1、创建goods表

2.2、创建user表

3、引入依赖(数据库连接)

3.1、user模块中的pom.xml,添加如下依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

3.2、goods模块中的pom.xml,添加如下依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

4、配置数据源

4.1、goods模块中的application.yml中添加如下配置

spring:datasource:url: jdbc:mysql://localhost:3306/shopk?useSSL=false&serverTimezone=UTC&characterEncoding=utf8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

4.2、user模块中的application.yml中添加如下配置

spring:datasource:url: jdbc:mysql://localhost:3306/shopk?useSSL=false&serverTimezone=UTC&characterEncoding=utf8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

5、测试事务

5.1、在user模块中提供接口,让goods服务通过feign调用

  • 在controller中添加访问接口
@Autowired
UserService userService;
​
@GetMapping("/feign/saveuser")
public void saveUser(){userService.save();
}

  • 在UserService中创建逻辑
@Service
public class UserService {​@AutowiredJdbcTemplate jdbcTemplate;
​@Transactionalpublic void save(){jdbcTemplate.update("INSERT INTO `user`(`user_name`) VALUES ('猿氏凯')");}
}

5.2、在feign模块中创建调用

@GetMapping("/feign/saveuser")
String saveUser();

5.2、在goods模块中进行调用

  • 创建接口
@GetMapping("/save")
public String goodsSave () {return goodsService.save();
}

  • 创建goodsService
public class GoodsService {@AutowiredUserFeignService userFeignService;
​@AutowiredJdbcTemplate jdbcTemplate;
​@Transactionalpublic String save(){userFeignService.saveUser();jdbcTemplate.update("INSERT INTO `goods`(`goods_name`) VALUES ('猿氏凯的商品1')");int a = 1/0; //编写错误逻辑让goods模块回滚return "成功";}
}

5.3、重启服务

  • 重启所有服务调用http://127.0.0.1:9003/goods/save可以发现页面报错

这时候看数据库可以发现,goods表中因为事务回滚没有插入数据,而user表中插入成功,很明显是回滚失败。


项目案例git地址:猿氏凯/spring-cloud-alibaba-demo

本文作者《猿氏·凯》,如果雷同,纯属抄袭····

jdbc 事务没有回滚_《Spring Cloud Alibaba》微服务搭建之Seata分布式事务quot;发现问题quot;(十四)...相关推荐

  1. 防止内卷和被潜规则,Spring Cloud Alibaba微服务架构实战派(上下册)|35岁程序员那些事

    目录 1 写书缘由 2 本书上册核心内容 2.1 Spring Cloud Alibaba基础实战 2.1.1 主要内容 2.1.2 MyBatis-Plus实现多租户架构的核心原理 2.2 分布式服 ...

  2. 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)

    本文承接上文<从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (上)> ...

  3. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

  4. Spring Cloud Alibaba 微服务开发实践

    作者:禅与计算机程序设计艺术 1.简介 Spring Cloud Alibaba 是阿里巴巴开源的基于 Spring Cloud 的微服务框架.该项目从最初孵化到现在已经历经十多年的发展,得到了广泛的 ...

  5. Spring Cloud Alibaba微服务项目中集成Redis实现分布式事务锁实践

    引言 我们知道同一个进程里面为了解决资源共享而不出现高并发的问题可以通过高并发编程解决,通过给变量添加volatile关键字实现线程间变量可见:通过synchronized关键字修饰代码块.对象或者方 ...

  6. Spring Cloud Alibaba微服务组件快速上手

    文章目录 Nacos 什么是Nacos Nacos的启动 将项目注册到Nacos 项目pom依赖 yaml配置 Nacos心跳机制 Dubbo 什么是RPC 什么是Dubbo Dubbo服务的注册与发 ...

  7. Spring Cloud Alibaba 微服务详细笔记

    文章目录 SpringCloud 一.微服务概述 1.1.什么是微服务? 1.2.为什么是微服务? 1.3.架构演变 1.4.微服务的解决方案 二.什么是SpringCloud 2.1.官方定义 2. ...

  8. 开源,阿里内部Spring Cloud Alibaba微服务神仙文档(全彩版)

    Spring Cloud Alibaba概述 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring C ...

  9. Spring Cloud Alibaba 微服务生态基础实践,线程池的底层原理

    content longtext NOT NULL COMMENT 'content', md5 varchar(32) DEFAULT NULL COMMENT 'md5', gmt_create ...

  10. 最新版Spring Cloud Alibaba微服务架构-Config配置中心篇

    文章目录 前言 一.Config引入背景 1.文件相对分散 2.无法区分环境 3.无法实时更新 4.安全无法保证 二.Config引入配置 1.配置文件格式 1.1 命名空间(Namespace) 1 ...

最新文章

  1. qq聊天框java_jQuery实现简单QQ聊天框
  2. 六、MySql索引分类
  3. mac系统下git、mysql、nginx、php的环境搭建
  4. DLL 的导入与导出
  5. @ResponseBody ResponseEntity
  6. 驱动开发中常用的操作和小知识
  7. MATLAB图像处理基础
  8. markdown 本地链接_markdown多平台发布及七牛图床使用
  9. 十步完成windows服务的安装
  10. 厉害了我的Qunar!看我工程师写轮眼!
  11. Linux 逻辑卷管理LVM
  12. Main线程与main()方法的关系
  13. sentry-前端应用监控工具
  14. etf基金代码大全_再谈深得我心的指数基金:纳指ETF
  15. 压缩包文件有密码如何解密
  16. 【编程开发】之 Java 实现邮件发送
  17. 一个php+ajax的在线匿名聊天室,PHP任意环境都可用,无需复杂配置,移动端电脑端互通流畅,随时随地聊个痛快~
  18. grid - gap
  19. USB总线转串口芯片:沁恒CH340
  20. python nlp 句子提取_python-仅从Stanford Core NLP获取作为输出的标记化句子

热门文章

  1. 东京disney sea流水账 2
  2. C#中Dictionary的用法及用途
  3. SOA渐行渐近-怎样给IT系统一个新视角?
  4. 【java与移动智能设备】布局方式
  5. 一定质量的封闭气体被压缩后_详解螺杆压缩机工作原理及结构
  6. php字符串操作整理,PHP学习之整理字符串
  7. android图片管理实例,Android图片处理实例介绍(图)
  8. 【转】js中forEach回调同异步问题
  9. 属性篇(2)—If you love css …
  10. 是时候表演真正的技术了——11个Git面试题目,你会多少?