Nacos、seata 1.5.2 安装集成以及报错信息,Exception in thread “main“ java.lang.reflect.InvocationTargetException。

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

 到此问题已解决,开机启动成功!

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值