seata下载网址下载中心 (seata.io)
我这次安装版本是seata.1.5.2因为我的项目用到的spring-cloud的版本是2021.0.4,本来想用seata1.6.1,但是经过我的查找,与我现用的版本不兼容,我的版本是:
<spring-cloud.version>2021.0.4</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
下载好之后我通过XFTP上传到 /usr/local/项目下,
用名命令tar -zxvf 进行解压,解压后会得到一个seata目录,进入到/usr/local/seata/conf 下修改application.xml,这里我修改默认的namespace修改这个之前,先去NACOS里创建一个命名空间,
创建好之后会拿到命名空间的ID,与之前的版本不同的是seata1.5.2在config里可以设置data-id
之前的版本需要执行脚本,进行将config.txt发布到nacos上。
这里的data-id可以替代之前脚本,如下图我们可以看见data-id:seataServer.properties
这里我们在看一下nacos的,定义在seata152的命名空间里。
seataServer.properties,这里只加入了部分代码。
#Transaction routing rules configuration, only for the client
service.vgroupMapping.zhny-tx-group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
#Transaction storage configuration, only for the server. The file, DB, and redis configuration values are optional.
store.mode=db
store.lock.mode=db
store.session.mode=db
#Used for password encryption
store.publicKey=
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/zhny_seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
这里的分组事务我起得名字叫zhny-tx-group
然后是nacos里的客户端的yml,里面的tx-service-group: zhny-tx-group和
vgroup-mapping:
zhny-tx-group: default
这两个地方的名字要保持一致,因为这里如果有两个客户端的话,就属于同一组事务里的。
# spring配置
spring:
redis:
host: localhost
port: 6379
password:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,slf4j
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.01:3306/zhny_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: 123456
# 从库数据源
# slave:
# username:
# password:
# url:
# driver-class-name:
seata: true
# seata配置
seata:
enabled: true
# Seata 应用编号,默认为 ${spring.application.name}
application-id: zhny-basic
# Seata 事务组编号,用于 TC 集群名
tx-service-group: zhny-tx-group
# 关闭自动代理
enable-auto-data-source-proxy: false
# 服务配置项
service:
# 虚拟组和分组的映射
vgroup-mapping:
zhny-tx-group: default
# 分组和 Seata 服务的映射
grouplist:
default: 127.0.0.1:8091
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace: 84d5f86a-7581-4f3b-af2e-82992cf0a31c
group: SEATA_GROUP
username: nacos
password: nacos
context-path:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key:
#secret-key:
data-id: seataServer.properties
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: 84d5f86a-7581-4f3b-af2e-82992cf0a31c
cluster: default
username: nacos
password: nacos
# mybatis配置
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.zhny.basic.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapper/**/*.xml
# 控制台打印sql
#configuration:
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
seata详细代码代码如下
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace: 84d5f86a-7581-4f3b-af2e-82992cf0a31c
group: SEATA_GROUP
username: nacos
password: nacos
context-path:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key:
#secret-key:
data-id: seataServer.properties
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: 84d5f86a-7581-4f3b-af2e-82992cf0a31c
cluster: default
username: nacos
password: nacos
store:
# support: file 、 db 、 redis
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/zhny_seata?rewriteBatchedStatements=true
user: root # mysql的用户名
password: 123456 #mysql的密码
min-conn: 5
max-conn: 100
global-table: global_table
branch-table: branch_table
lock-table: lock_table
distributed-lock-table: distributed_lock
query-limit: 100
max-wait: 5000
# server:
# service-port: 8091 #If not configured, the default is '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
这样操作好之后我们就可以执行seata下的sh seata-server.sh 可以看到运行成功。
接着我想让seata执行开机自动启动,所以我写了一个脚本。
# 编写服务脚本
vim /lib/systemd/system/seata.service
[Unit]
Description=seata
After=nacos.service
[Service]
Type=forking
ExecStart= /usr/local/seata/bin/seata-server.sh
ExecStop=/usr/local/seata/bin/stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
照着别人写得脚本改了一下停机脚本stop.sh,根据启动得PID进行杀进程。
#!/bin/sh
cd /usr/local/seata/bin
PID=$(ps -ef | grep "seata-server" | grep -v grep | awk '{print $2}')
if [ ${PID} ];
then
echo 'Application is stpping...'
echo kill $PID DONE
kill $PID
else
echo 'Application is already stopped...'
fi
# 重新加载所有service服务
systemctl daemon-reload
# 开机启动
systemctl enable seata.service
# 查看该service是否开机启用
systemctl is-enabled seata.service
# 启动该服务
systemctl start seata.service
# 查看该服务状态
systemctl status seata.service
#重启服务
systemctl restart seata.service
执行systemctl start seata.service发现报错了,这个问题我在网上找了一天半,非常奇怪,在bin目录下可以正常运行,加入到开机自启服务里就运行失败!
咱们看看错误信息Exception in thread "main" java.lang.reflect.InvocationTargetException,咱们是菜鸟级别的呀,翻了一天的解决资料,终于找到了博客里有一位大牛。
seata-server.sh
中的启动命令,-Dloader.path=../lib
用的是相对路径
,
只有在 seata包的 bin/路径下执行 seata-server.sh 才能正确获取到 lib 中的jar包正常启动
1.5.2的打包和启动方式变了目录结构也不一样,所以我更喜欢他的推荐方式一
方式一:修改seata-server.sh脚本(推荐)
vim user/local/seata/bin/seata-server.sh
找到 -Dloader.path=../lib
配置改为绝对路径: -Dloader.path=${BASEDIR}/lib
https://blog.csdn.net/weixin_43582081/article/details/125949859
到此问题已解决,开机启动成功!