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

首先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 判断再抛出异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现简单的学生管理系统

学生管理系统 student_infos [] #打印功能提示 def print_menu():print("" * 30)print("学生管理系统v1.0")print("1.添加学生信息")print("2.删除学生信息")print("3.修改学生信息")print("4.显示所有学生信息"…

vue仿饿了么点餐手机端

vue仿饿了么点餐手机端模板,包括评论,商品,商家模块,添加商品到购物车,左侧分类计数功能,右侧滑动时分类有上推功能,小球飞入购物车功能。

python123九宫格输入法_《啊哈C语言-2016最新修正版》.pdf

《啊哈C语言-2016最新修正版》.pdf| 啊哈C语言|后续内容还请关注[ ][ ][[ 网站首页 ]][ ][ ][[ 网站问答 ]] /qa[ ][ ][[ 新浪微博 ]] /ahalei[ ][ ][[ 人人主页 ]] /601196462如果您有任何建议您,可以在 上留言,或者骚扰书写匆忙,欢迎批评纠…

数据库复习资料及课后习题答案

数据库概论 1.1 基本内容分析 1.1.1 本章的重要概念 DB、DBMS和DBS的定义 (2)数据管理技术的发展阶段 人工管理阶段、文件系统阶段、数据库系统阶段和高级数据库技术阶段等各阶段的特点。 (3)数据描述 概念设计、逻辑设计…

apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了

点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can disturb your peace of mind. 对自己承诺:我要强大到任何事情都无法破坏我内心的平和。 每日掏心话 每一发奋努力的背后&a…

python 运行时间 装饰器_python 装饰器统计某个函数的运行时间

import datetimedef count_time(func):def int_time(*args, **kwargs):start_time datetime.datetime.now() # 程序开始时间func()over_time datetime.datetime.now() # 程序结束时间total_time (over_time-start_time).total_seconds()print(程序共计%s秒 % total_time)ret…

《大学计算机基础》试题题库及答案

一、单选题练习 1.完整的计算机系统由( C )组成。A.运算器、控制器、存储器、输入设备和输出设备B.主机和外部设备C.硬件系统和软件系统D.主机箱、显示器、键盘、鼠标、打印机2.以…

docker添加新的环境变量_Docker环境变量

环境变量环境变量通常在与您正在使用的基本映像关联的Dockerfile中设置。也有Docker为每个新容器自动设置的环境变量。您可以指定其他变量,并使用-e或--env选项重新定义Docker设置的变量。在Docker运行配置中,您可以使用“环境变量(Environment variable…

c语言期末考试复习题

单项选择题 1.( A )是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从 C 开始执行。 A) 程序中第一条可执行语句 B) 程序中第一个函数 C) 程序中的main函数 …

js制定一个单选按钮_【下】每个月整理发票太头疼?手把手教你快速开发一个工具解决!...

"NightTeam",一个值得加星标的公众号。在上篇中,我们已经将我们的发票管理工具开发到了能一键导入发票、能看到效果、能仍然不太方便地管理的状态,接下来我们来继续将还没有加进去的那些方便的功能给加上,以将管理发票的…

exec go 重启_无停机优雅重启 Go 程序

什么是优雅重启在不停机的情况下,就地部署一个应用程序的新版本或者修改其配置的能力已经成为现代软件系统的标配。这篇文章讨论优雅重启一个应用的不同方法,并且提供一个功能独立的案例来深挖实现细节。如果你不熟悉 Teleport 话,Teleport 是…

ai怎么让图片任意变形_想一键提取图片文字,有什么好的文字识别软件/APP推荐吗?...

工作也有一段时间了,有时候需要把图片中的文字提取出来,转换成电子档式,一开始的时候可能是傻吧,也没想到借用工作减少工作量,就知道埋头拼命敲敲打打,文字比较少的时候还好,多了简直...得颈椎病…

MySql和Oracle数据库的区别?

查询当前所有的表 SQL> select * from tab; SQL> select * from cat where table_type’TABLE’;//可能会有view SQL>select * from user_tables; mysql> show tables; c:/mysql/bin>mysqlshow 库名 显示当前连接用户(库) SQL> sh…

隐藏功能_IOS 14.2 隐藏功能

FaceTime隐藏功能现身,只要设备运行 iOS 14.2 系统,iPhone 8 或更新的机型都可以以 1080p 分辨率进行视频通话,1080p什么概念,平时看视频应该最有感触。FaceTime 是什么?可能有些小伙伴压根儿就没听说过这个功能。Face…

SSH框架(Struts+Spring+Hibernate)

在SSH 的组合框架模式中,三者各自的作用? Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。基于Struts开发可以简化开发难度,提高开发效…

mapbox矢量切片标准_Cesium 加载矢量切片(MapBox Vector Tile)

矢量切片(vector tile)是当前 WebGIS 较热技术,国内的高德、百度等在线地图都使用了矢量切片技术。相较于传统栅格切片,矢量切片好处很多。简单几点就是:轻量、客户端渲染、还可加密(栅格切片容易被爬取)。矢量切片格式一般有 GeoJSON、TopoJ…

d630无电池升级bios_太重要,你想要的电脑BIOS全面解读与设置(下)

设置意外断电后恢复状态通常在电脑意外断电后,需要重新启动电脑,但在 BIOS 中可以对断电恢 复进行设置,一旦电源恢复,电脑将自动启动。下面就在 UEFIBIOS 中设置电 脑的自动断电后重启,具体操作步骤如下。 STEP 1 选择…

MySQL的乱码解决方案

1.如果第一次安装MySQL数据库: 在选择编码时,选择最后一项,并指定编码为utf8或者gbk(这两种编码支持中文,是我们比较常用的) 如果已经按照完成了MySQL数据库,那么可以进行重新配置修改: 在开始菜单中找到: 然后重复第…

pg数据库开启远程连接_疫情之下,开启在家办公模式,远程连接工具篇之向日葵...

1月30号本来就要返程去上班了,接到公司通知,根据当前疫情的形势,假期延长到3号,退车票,候补抢票一顿操作,将票改到了3号,3号又接到通知假期延长到10号。作为一个一线的销售人员,工作…

谈谈对MVC的理解(View+Model+Controller)

1) 什么是MVC? MVC是一种设计思想,根据职责不同将程序中的组件分成以下3个部分。 V(View视图):负责与用户交互。将数据展现,或者是接收数据 M(Model模型):负责业务处理。…