springcloud整合seata我踩过的坑

  1. 版本问题 seata 1.5和1.5之前的目录结构不同,使用docker修改的配置文件也不同
    1.4的左右springcloud整合seata我踩过的坑_第1张图片
    1.5之后springcloud整合seata我踩过的坑_第2张图片
  2. docker 挂载文件也不同
    1.5之前是使用自己写的挂载registry
docker run -d -p 8091:8091 -p 7091:7091   --network newlead  --name seata-serve    -e SEATA_IP=192.168.249.132     -v /home/hadoop/seata-sever1.4/seata-server.conf:/seata-server/resources/registry.conf     seataio/seata-server:1.4.0 

1.5后就是
先运行一个容器,把目录复制出来进行挂载

docker run -d -p 8091:8091 -p 7091:7091  --name seata-serve seataio/seata-server:latest
#拷出后可以,可以选择修改application.yml再cp进容器,或者rm临时容器,如下重新创建,并做好映射路径设置
docker cp seata-serve:/seata-server/resources /User/seata/config
  • 指定 application.yml
docker run --name seata-server \
        -p 8091:8091 \
        -p 7091:7091 \
   -e SEATA_IP=宿主机ip \
        -v /User/seata/config:/seata-server/resources  \
        seataio/seata-server
  1. 连接不上nacos 或者springcloud连接不上seata,这三个之前
    有版本依赖关系如果跨版本就会报错

  2. 数据库连接失败导致seata无法启动

当你的数据库是8之后,也许你的项目可以使用老驱动连接mysql,但是seata一定会报错,如果报错null指针,就要看看是否需要更换新驱动,并且有seata有些版本需要加时区

store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://localhost:3306/seata?useUnicode=true&rewriteBatchedStatements=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
  1. 在使用seata时候需要在对应服务的库中添加undo_log回调日志表和全局锁表,不然也可能服务事务无法被seata管理
/*
 Navicat Premium Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 50622
 Source Host           : localhost:3306
 Source Schema         : seata_demo

 Target Server Type    : MySQL
 Target Server Version : 50622
 File Encoding         : 65001

 Date: 20/06/2021 12:39:03
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log`  (
  `branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',
  `xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'global transaction id',
  `context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci 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 INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'AT transaction mode undo table' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of undo_log
-- ----------------------------



-- ----------------------------
-- Table structure for lock_table
-- ----------------------------
DROP TABLE IF EXISTS `lock_table`;
CREATE TABLE `lock_table`  (
  `row_key` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `xid` varchar(96) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `branch_id` bigint(20) NOT NULL,
  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `pk` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gmt_create` datetime NULL DEFAULT NULL,
  `gmt_modified` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`row_key`) USING BTREE,
  INDEX `idx_branch_id`(`branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;


SET FOREIGN_KEY_CHECKS = 1;

你可能感兴趣的:(spring,cloud,spring,后端)