首先Seata1.2.0版本不在自带sql,且在file.conf文件中没有了vgroup_mapping.fsp_tx_group =“default” 这项配置

数据库SQL

seata数据库 drop table if exists `global_table`;

create table `global_table` (

`xid` varchar(128) not null,

`transaction_id` bigint,

`status` tinyint not null,

`application_id` varchar(32),

`transaction_service_group` varchar(32),

`transaction_name` varchar(128),

`timeout` int,

`begin_time` bigint,

`application_data` varchar(2000),

`gmt_create` datetime,

`gmt_modified` datetime,

primary key (`xid`),

key `idx_gmt_modified_status` (`gmt_modified`, `status`),

key `idx_transaction_id` (`transaction_id`)

);

-- the table to store BranchSession data

drop table if exists `branch_table`;

create table `branch_table` (

`branch_id` bigint not null,

`xid` varchar(128) not null,

`transaction_id` bigint ,

`resource_group_id` varchar(32),

`resource_id` varchar(256) ,

`lock_key` varchar(128) ,

`branch_type` varchar(8) ,

`status` tinyint,

`client_id` varchar(64),

`application_data` varchar(2000),

`gmt_create` datetime,

`gmt_modified` datetime,

primary key (`branch_id`),

key `idx_xid` (`xid`)

);

-- the table to store lock data

drop table if exists `lock_table`;

create table `lock_table` (

`row_key` varchar(128) not null,

`xid` varchar(96),

`transaction_id` long ,

`branch_id` long,

`resource_id` varchar(256) ,

`table_name` varchar(32) ,

`pk` varchar(36) ,

`gmt_create` datetime ,

`gmt_modified` datetime,

primary key(`row_key`)

);

在其它使用seata的数据库中建undo_log表 drop table `undo_log`;

CREATE TABLE `undo_log` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`branch_id` bigint(20) NOT NULL,

`xid` varchar(100) NOT NULL,

`context` varchar(128) NOT NULL,

`rollback_info` longblob NOT NULL,

`log_status` int(11) 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=1 DEFAULT CHARSET=utf8;

修改file.conf

将mode改为db

修改数据库为自己的地址和用户名密码

## transaction log store, only used in seata-server

store {

## store mode: file、db

mode = "db"

## file store property

file {

## store location dir

dir = "sessionStore"

# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions

maxBranchSessionSize = 16384

# globe session size , if exceeded throws exceptions

maxGlobalSessionSize = 512

# file buffer size , if exceeded allocate new buffer

fileWriteBufferCacheSize = 16384

# when recover batch read size

sessionReloadReadSize = 100

# async, sync

flushDiskMode = async

}

## database store property

db {

## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.

datasource = "druid"

## mysql/oracle/postgresql/h2/oceanbase etc.

dbType = "mysql"

driverClassName = "com.mysql.jdbc.Driver"

url = "jdbc:mysql://127.0.0.1:3306/seata"

user = "root"

password = "root"

minConn = 5

maxConn = 30

globalTable = "global_table"

branchTable = "branch_table"

lockTable = "lock_table"

queryLimit = 100

maxWait = 5000

}

}

修改file.conf.example

更改的内容与file.conf一致

transport {

# tcp udt unix-domain-socket

type = "TCP"

#NIO NATIVE

server = "NIO"

#enable heartbeat

heartbeat = true

# the client batch send request enable

enableClientBatchSendRequest = false

#thread factory for netty

threadFactory {

bossThreadPrefix = "NettyBoss"

workerThreadPrefix = "NettyServerNIOWorker"

serverExecutorThreadPrefix = "NettyServerBizHandler"

shareBossWorker = false

clientSelectorThreadPrefix = "NettyClientSelector"

clientSelectorThreadSize = 1

clientWorkerThreadPrefix = "NettyClientWorkerThread"

# netty boss thread size,will not be used for UDT

bossThreadSize = 1

#auto default pin or 8

workerThreadSize = "default"

}

shutdown {

# when destroy server, wait seconds

wait = 3

}

serialization = "seata"

compressor = "none"

}

## transaction log store, only used in server side

store {

## store mode: file、db

mode = "db"

## file store property

file {

## store location dir

dir = "sessionStore"

# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions

maxBranchSessionSize = 16384

# globe session size , if exceeded throws exceptions

maxGlobalSessionSize = 512

# file buffer size , if exceeded allocate new buffer

fileWriteBufferCacheSize = 16384

# when recover batch read size

sessionReloadReadSize = 100

# async, sync

flushDiskMode = async

}

## database store property

db {

## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.

datasource = "druid"

## mysql/oracle/postgresql/h2/oceanbase etc.

dbType = "mysql"

driverClassName = "com.mysql.jdbc.Driver"

url = "jdbc:mysql://127.0.0.1:3306/seata"

user = "root"

password = "root"

minConn = 5

maxConn = 30

globalTable = "global_table"

branchTable = "branch_table"

lockTable = "lock_table"

queryLimit = 100

}

}

## server configuration, only used in server side

server {

recovery {

#schedule committing retry period in milliseconds

committingRetryPeriod = 1000

#schedule asyn committing retry period in milliseconds

asynCommittingRetryPeriod = 1000

#schedule rollbacking retry period in milliseconds

rollbackingRetryPeriod = 1000

#schedule timeout retry period in milliseconds

timeoutRetryPeriod = 1000

}

undo {

logSaveDays = 7

#schedule delete expired undo_log in milliseconds

logDeletePeriod = 86400000

}

#unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent

maxCommitRetryTimeout = "-1"

maxRollbackRetryTimeout = "-1"

rollbackRetryTimeoutUnlockEnable = false

}

## metrics configuration, only used in server side

metrics {

enabled = false

registryType = "compact"

# multi exporters use comma divided

exporterList = "prometheus"

exporterPrometheusPort = 9898

}

修改registry.conf

将type修改为nacos

修改serverAddr为localhost:8848;默认为localhsot

registry {

# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa

type = "nacos"

nacos {

application = "seata-server"

serverAddr = "localhost:8848"

namespace = ""

cluster = "default"

username = ""

password = ""

}

eureka {

serviceUrl = "http://localhost:8761/eureka"

application = "default"

weight = "1"

}

redis {

serverAddr = "localhost:6379"

db = 0

password = ""

cluster = "default"

timeout = 0

}

zk {

cluster = "default"

serverAddr = "127.0.0.1:2181"

sessionTimeout = 6000

connectTimeout = 2000

username = ""

password = ""

}

consul {

cluster = "default"

serverAddr = "127.0.0.1:8500"

}

etcd3 {

cluster = "default"

serverAddr = "http://localhost:2379"

}

sofa {

serverAddr = "127.0.0.1:9603"

application = "default"

region = "DEFAULT_ZONE"

datacenter = "DefaultDataCenter"

cluster = "default"

group = "SEATA_GROUP"

addressWaitTime = "3000"

}

file {

name = "file.conf"

}

}

config {

# file、nacos 、apollo、zk、consul、etcd3

type = "file"

nacos {

serverAddr = "localhost"

namespace = ""

group = "SEATA_GROUP"

username = ""

password = ""

}

consul {

serverAddr = "127.0.0.1:8500"

}

apollo {

appId = "seata-server"

apolloMeta = "http://192.168.1.204:8801"

namespace = "application"

}

zk {

serverAddr = "127.0.0.1:2181"

sessionTimeout = 6000

connectTimeout = 2000

username = ""

password = ""

}

etcd3 {

serverAddr = "http://localhost:2379"

}

file {

name = "file.conf"

}

}

启动Seata(之前得先启动Nacos)

直接闪退

原因:找不到logback.xml配置log文件或目录

解决: 修改logback.xml文件

将${user.home}写为固定地址

修改前:

修改后:

报错:java.sql.SQLException: Could not retrieve transation read-only status server

解决

一、查看mysql的事务隔离级别 SHOW VARIABLES LIKE '%iso%';

二、将隔离级别改为READ-COMMITTED SET GLOBAL transaction_isolation='READ-COMMITTED';

再次启动Seata 报错:

ERROR[main]com.alibaba.druid.pool.DruidDataSource.init:878 -init datasource error, url: jdbc:mysql://127.0.0.1:3306/seata java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

解决:修改file.conf 和 file.conf.example 在url后要加上serverTimezone

修改前: url = "jdbc:mysql://127.0.0.1:3306/seata"

修改后: url = "jdbc:mysql://127.0.0.1:3306/seata?serverTimezone=GMT%2B8"

注意:如果使用的是mysql8版本以上,还需将修改driverClassName

修改前: driverClassName = "com.mysql.jdbc.Driver"

修改后: driverClassName = "com.mysql.cj.jdbc.Driver"

环境准备完成,开撸

POM(版本信息在父POM已经定义好,都是目前位置最新版本)

com.alibaba.cloudgroupId>

spring-cloud-starter-alibaba-seataartifactId>

io.seatagroupId>

seata-allartifactId>

exclusion>

io.seatagroupId>

seata-spring-boot-starterartifactId>

exclusion>

exclusions>

dependency>

io.seatagroupId>

seata-spring-boot-starterartifactId>

1.2.0version>

dependency>

com.alibabagroupId>

druidartifactId>

1.1.22version>

dependency>

com.alibaba.cloudgroupId>

spring-cloud-alibaba-nacos-discoveryartifactId>

dependency>

org.springframework.cloudgroupId>

spring-cloud-starter-openfeignartifactId>

dependency>

org.springframework.bootgroupId>

spring-boot-starter-webartifactId>

dependency>

org.springframework.bootgroupId>

spring-boot-starter-actuatorartifactId>

dependency>

org.springframework.bootgroupId>

spring-boot-devtoolsartifactId>

dependency>

org.springframework.bootgroupId>

spring-boot-starter-data-jdbcartifactId>

dependency>

org.mybatis.spring.bootgroupId>

mybatis-spring-boot-starterartifactId>

dependency>

mysqlgroupId>

mysql-connector-javaartifactId>

dependency>

org.projectlombokgroupId>

lombokartifactId>

dependency>

dependencies>

YAML

server:

port: 9001

spring:

application:

name: cloud-seata-order

cloud:

nacos:

discovery:

server-addr: localhost:8848

datasource:

type: com.alibaba.druid.pool.DruidDataSource

username: root

password: root

url: jdbc:mysql://127.0.0.1:3306/order?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8

driver-class-name: com.mysql.cj.jdbc.Driver

management:

endpoints:

web:

exposure:

include: '*'

mybatis:

mapper-locations: classpath:mapper/*.xml

seata:

application-id: ${spring.application.name}

tx-service-group: default

service:

vgroupMapping:

default: default

grouplist:

default: 127.0.0.1:8091

ribbon:

ReadTimeout: 6000

ConnectTimout: 6000

主启动

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication

@EnableFeignClients

@EnableDiscoveryClient

public class OrderSeataMain9001 {

public static void main(String[] args) {

SpringApplication.run(OrderSeataMain9001.class,args);

}

}

目录结构

其它的微服务模块和代码就不再赘述,order --> storage --> account {订单 库存 账户(余额)}

启动Order应用:

报错:no available service ‘null’ found, please make sure registry config correct

将依赖的seata-spring-boot-starter排除(前面的POM已经是修改过后的)

再导入seata-spring-boot-starter

com.alibaba.cloudgroupId>

spring-cloud-starter-alibaba-seataartifactId>

io.seatagroupId>

seata-allartifactId>

exclusion>

io.seatagroupId>

seata-spring-boot-starterartifactId>

exclusion>

exclusions>

dependency>

io.seatagroupId>

seata-spring-boot-starterartifactId>

1.2.0version>

dependency>

且YAML为(前面的YAML已经是修改后的,这里只是阐述问题)

在新版中vgroup-mappging改为了vgroupMapping驼峰命名

且此处Key对应 tx-service-group 的 Value, 此处 value 默认 default

如果不指定grouplist

报如下错:java.lang.IllegalArgumentException: defalut.grouplist is required

seata:

application-id: ${spring.application.name}

tx-service-group: default

service:

vgroupMapping:

default: default

grouplist:

default: 127.0.0.1:8091

第二个问题:

Cause: java.sql.SQLException: com.alibaba.fescar.core.exception.TransactionException: RPC Timeout

问题描述:之前我是连的远程阿里云服务器的mysql,在调用的出现RPC Timeout异常

@Service

public class OrderServiceImpl implements OrderService {

@Resource

private OrderDao orderDao;

@Resource

private AccountService accountService;

@Resource

private StorageService storageService;

@Override

@GlobalTransactional(name = "default",rollbackFor = Exception.class)

public void create(@RequestParam Order order) {

orderDao.create(order);

accountService.accountDecease(order.getUserId(),order.getMoney()*order.getCount());

int i = 10/0;

storageService.storageDecease(order.getCommodityCode(),order.getCount());

}

}

这里写了int i = 10 / 0;的一个异常调用时出现RPC Timeout异常,而去掉int i = 10/0后 调用正常;

这里的解决方法就是YAML为ribbon设置超时时间后访问成功by /zero,且事务回滚正常:

ribbon:

ReadTimeout: 6000

ConnectTimout: 6000

而这个问题比较奇怪的是,我把mysql切换到本地的mysql后,就没有RPC Timeout异常;

且我的阿里云服务器访问正常,不存在网络差的情况

最后附上使用AT模式的注意事项(来源:官网)

使用 AT 模式需要的注意事项有哪些 ?

1.必须使用代理数据源,有 3 种形式可以代理数据源:

依赖 seata-spring-boot-starter 时,自动代理数据源,无需额外处理。

依赖 seata-all 时,使用 @EnableAutoDataSourceProxy (since 1.1.0) 注解,注解参数可选择 jdk 代理或者 cglib 代理。

依赖 seata-all 时,也可以手动使用 DatasourceProxy 来包装 DataSource。

2.配置 GlobalTransactionScanner,使用 seata-all 时需要手动配置,使用 seata-spring-boot-starter 时无需额外处理。

3.业务表中必须包含单列主键,若存在复合主键,请参考问题 13 。

4.每个业务库中必须包含 undo_log 表,若与分库分表组件联用,分库不分表。

5.跨微服务链路的事务需要对相应 RPC 框架支持,目前 seata-all 中已经支持:Apache Dubbo、Alibaba Dubbo、sofa-RPC、Motan、gRpc、httpClient,对于 Spring Cloud 的支持,请大家引用 spring-cloud-alibaba-seata。其他自研框架、异步模型、消息消费事务模型请结合 API 自行支持。

6.目前AT模式支持的数据库有:MySQL、Oracle、PostgreSQL和 TiDB。

7.使用注解开启分布式事务时,若默认服务 provider 端加入 consumer 端的事务,provider 可不标注注解。但是,provider 同样需要相应的依赖和配置,仅可省略注解。

8.使用注解开启分布式事务时,若要求事务回滚,必须将异常抛出到事务的发起方,被事务发起方的 @GlobalTransactional 注解感知到。provide 直接抛出异常 或 定义错误码由 consumer 判断再抛出异常。

seata执行闪退_Seata 1.2.0的配置以及踩坑记录相关推荐

  1. 【MathType安装】Office2019+MathType7.4.8.0+踩坑记录+最终使用方案

    使用Office2019安装MathType7.4.8.0屡屡碰壁,最终使用的解决方案不同于网络上的大多数方法.尽管当前记录的解决方案还不完美.未做到一劳永逸,但能用就行. MathType安装包获取 ...

  2. Ubuntu20.0编译LineageOs14刷入小米8Lite(青春版)流程与踩坑记录

    本文全是个人经历与踩坑记录,不同机型配置可能不一样 全文踩坑内容错误加粗 编写时间:2022.5.24-14:53 机型配置: 虚拟机 4核心 每核心2线程 手机 小米8Lite 设备代号:plati ...

  3. Qt5.13.2中配置opencv4.5.0踩坑记录

      目录 cmake编译opencv时速度过慢或超时 mingw32-make时报错 错误一 [modules\core\CMakeFiles\opencv_core.dir\build.make:1 ...

  4. 警惕参数变化,MySQL 8.0 升级避免再次踩坑

    MySQL 8.0新特性专栏目录 <MySQL开发规范>过时了,视图查询性能提升了一万倍 你真的会用EXPLAIN么,SQL性能优化王者晋级之路 索引三剑客之降序索引和不可见索引 千呼万唤 ...

  5. python-exe执行闪退问题

    最近在写python脚本,并且打包成exe执行.但是发现exe点击之后会一直闪退!并且很难看到为什么闪退(肯定是python执行异常了!!).在网上也看到了很多人提供的办法,但是发现可能不是最好的.我 ...

  6. 【踩坑记录】—— app运行闪退(Mac版)

    目录 一.故事开始 二.问题分析 三.无脑排查 四.总结 一.故事开始 2022/3/27 一个风和日丽的下午☀️☀️ 近期在学做一些入门级的小项目,写了个小工具的脚本之后,想拓展一下,用PYQT5做 ...

  7. 关于tomcat服务器启功时闪退问题以及最新Java如何配置环境变量

    关于tomcat闪退问题 原因:没有配置java环境变量 解决方法:安装老版本的Java的参照其他博客 这里主要说一下新版本的Java如何配置环境变量,因为最新版本的Java中在jdk文件夹下找不到j ...

  8. springcloud 2.0 服务链路追踪踩坑以及一些小小的理解

    在微服务系统中,随着业务的发展,系统会变得越来越大,这样一来各个服务之间的调用关系也就变得越来越复杂.一个 HTTP 请求会调用多个不同的服务接口来处理返回最后的结果,在这个调用过程中,可能会因为某个 ...

  9. 复现CLOCs中spconv v1.0 (commit 8da6f96)踩坑记录

    最近看了一篇基于KITTI做2D和3D后融合的论文,CLOCs: Camera-LiDAR Object Candidates Fusion for 3D Object Detection.作者在Gi ...

最新文章

  1. Discuz X3.1 论坛修改的方法(门户的修改)
  2. mysql 下载地址及安装教程
  3. VB的一些项目中常用的通用方法-一般用于验证类
  4. 【搜索引擎Jediael开发4】V0.01完整代码
  5. 谈谈var变量提升以及var,let,const的区别
  6. 穿上马甲就没认出polya定理之典型题目手环
  7. Minimum Window Substring @LeetCode
  8. 新手linux安装vasp_VASP软件在ubuntu10.04下的安装过程
  9. 好用的android高清播放器,高清播放器哪个好用(推荐4款4K高清画质播放器)
  10. Mysql服务器默认端口是什么?
  11. 开发撞墙之奇怪的需求:度分秒格式动态转换
  12. CV中domain adaptation领域自适应问题
  13. 全网最火! 阿里 P6 级,廖雪峰的「全栈架构师」开讲了
  14. mcinabox运行库下载安装_mcinabox运行库下载
  15. 基于深度学习的CNN边缘检测RCF--Richer Convolutional Features for Edge Detection
  16. Qt例子学习笔记 - Examples/Qt-6.2.0/charts/callout
  17. c++,给成绩分等级
  18. 嵌入式是什么?arm是什么?
  19. 数据预处理利器 Amazon Glue DataBrew
  20. 如何有效开展小组教学_如何有效开展小组教学

热门文章

  1. 代码质量第 5 层 - 只是实现了功能
  2. 腾讯安全发布安全托管服务MSS,推动网络安全建设向服务驱动转变
  3. VMware连续三年获评Gartner广域网边缘基础设施魔力象限领导者
  4. 专访世界顶级游戏背后的男人
  5. 5G精华问答 | 大数据和5G有什么关系?
  6. 对象的基础用法和解构赋值
  7. 计算机动漫设计VR主要学什么,VR动漫制作怎么学?
  8. 火柴人_火柴人战争遗产修改无限金币钻石
  9. 在CentOs7上yum安装redis
  10. idea出现 Error:(1, 16) java: 非法字符: '\u0a0d'