seata1.4版本配置以及java配置
1.Seata下载
GitHub下载1.4.2版本
第一个是源码
第二个是编译后的 建议都下载因为有些文件在0.9版本后面都没有了 比如 表的创建以及一些配置项
2.下载后直接解压
先进入conf打开registry.conf 把这个设置为nacos
以及下面的配置文件去那里取 也是换成nacos
再打开file.conf 设置mode为db然后修改下面的db项
driverClassName 这个要看你mysql版本8以上就要加个cj 下面URL那里还要加时区一些东西 记得都加上
账号密码啥的都不用多说
再创建数据库sql脚本都在md文件里面有写
-- -------------------------------- The script used when storeMode is 'db' ---------------------------------- the table to store GlobalSession dataCREATE TABLE IF NOT EXISTS `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_status_gmt_modified` (`status` , `gmt_modified`), KEY `idx_transaction_id` (`transaction_id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;-- the table to store BranchSession dataCREATE TABLE IF NOT EXISTS `branch_table`( `branch_id` BIGINTNOT NULL, `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, `resource_group_id` VARCHAR(32), `resource_id`VARCHAR(256), `branch_type`VARCHAR(8), `status` TINYINT, `client_id` VARCHAR(64), `application_data` VARCHAR(2000), `gmt_create` DATETIME(6), `gmt_modified` DATETIME(6), PRIMARY KEY (`branch_id`), KEY `idx_xid` (`xid`)) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;-- the table to store lock dataCREATE TABLE IF NOT EXISTS `lock_table`( `row_key` VARCHAR(128) NOT NULL, `xid` VARCHAR(128), `transaction_id` BIGINT, `branch_id` BIGINTNOT NULL, `resource_id` VARCHAR(256), `table_name` VARCHAR(32), `pk` VARCHAR(36), `status` TINYINT NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking', `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMARY KEY (`row_key`), KEY `idx_status` (`status`), KEY `idx_branch_id` (`branch_id`), KEY `idx_xid_and_branch_id` (`xid` , `branch_id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;CREATE TABLE IF NOT EXISTS `distributed_lock`( `lock_key`CHAR(20) NOT NULL, `lock_value` VARCHAR(20) NOT NULL, `expire` BIGINT, primary key (`lock_key`)) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
好配置完成现在点击bin目录下的seata-server.bat启动
去nacos看如果服务那里有seata-server这个就是启动成功;
3.接下来就是seata的配置文件了写入nacos里
文件名字是特定的在registry.conf 的config下的nacos配置一样有个dataId对应的就nacos里面的配置文件名seataServer.properties; 分组也要是一致的当然你可以自己修改
里面就是下面这样
这里的配置项可以去官方的GitHub上的项目目录找
我这里就添一些常用的
transport.type=TCPtransport.server=NIOtransport.heartbeat=truetransport.enableClientBatchSendRequest=truetransport.threadFactory.bossThreadPrefix=NettyBosstransport.threadFactory.workerThreadPrefix=NettyServerNIOWorkertransport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandlertransport.threadFactory.shareBossWorker=falsetransport.threadFactory.clientSelectorThreadPrefix=NettyClientSelectortransport.threadFactory.clientSelectorThreadSize=1transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThreadtransport.threadFactory.bossThreadSize=1transport.threadFactory.workerThreadSize=defaulttransport.shutdown.wait=3transport.serialization=seatatransport.compressor=none# serverserver.recovery.committingRetryPeriod=1000server.recovery.asynCommittingRetryPeriod=1000server.recovery.rollbackingRetryPeriod=1000server.recovery.timeoutRetryPeriod=1000server.undo.logSaveDays=7server.undo.logDeletePeriod=86400000server.maxCommitRetryTimeout=-1server.maxRollbackRetryTimeout=-1server.rollbackRetryTimeoutUnlockEnable=falseserver.distributedLockExpireTime=10000# store#model改为dbstore.mode=dbstore.lock.mode=filestore.session.mode=file# store.publicKey=""store.file.dir=file_store/datastore.file.maxBranchSessionSize=16384store.file.maxGlobalSessionSize=512store.file.fileWriteBufferCacheSize=16384store.file.flushDiskMode=asyncstore.file.sessionReloadReadSize=100store.db.datasource=druidstore.db.dbType=mysql#修改数据驱动,这里是mysql8,使用mysql5的话请修改store.db.driverClassName=com.mysql.cj.jdbc.Driver# 改为上面创建的seata服务数据库store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC# 改为自己的数据库用户名store.db.user=root# 改为自己的数据库密码store.db.password=xu20010502store.db.minConn=5store.db.maxConn=30store.db.globalTable=global_tablestore.db.branchTable=branch_tablestore.db.distributedLockTable=distributed_lockstore.db.queryLimit=100store.db.lockTable=lock_tablestore.db.maxWait=5000store.redis.mode=singlestore.redis.single.host=127.0.0.1store.redis.single.port=6379# store.redis.sentinel.masterName=""# store.redis.sentinel.sentinelHosts=""store.redis.maxConn=10store.redis.minConn=1store.redis.maxTotal=100store.redis.database=0# store.redis.password=""store.redis.queryLimit=100# loglog.exceptionRate=100# metricsmetrics.enabled=falsemetrics.registryType=compactmetrics.exporterList=prometheusmetrics.exporterPrometheusPort=9898# service# 自己命名一个vgroupMappingservice.vgroupMapping.mygroup=defaultservice.default.grouplist=127.0.0.1:8091service.enableDegrade=falseservice.disableGlobalTransaction=false# clientclient.rm.asyncCommitBufferLimit=10000client.rm.lock.retryInterval=10client.rm.lock.retryTimes=30client.rm.lock.retryPolicyBranchRollbackOnConflict=trueclient.rm.reportRetryCount=5client.rm.tableMetaCheckEnable=falseclient.rm.tableMetaCheckerInterval=60000client.rm.sqlParserType=druidclient.rm.reportSuccessEnable=falseclient.rm.sagaBranchRegisterEnable=falseclient.rm.tccActionInterceptorOrder=-2147482648client.tm.commitRetryCount=5client.tm.rollbackRetryCount=5client.tm.defaultGlobalTransactionTimeout=60000client.tm.degradeCheck=falseclient.tm.degradeCheckAllowTimes=10client.tm.degradeCheckPeriod=2000client.tm.interceptorOrder=-2147482648client.undo.dataValidation=trueclient.undo.logSerialization=jacksonclient.undo.onlyCareUpdateColumns=trueclient.undo.logTable=undo_logclient.undo.compress.enable=trueclient.undo.compress.type=zipclient.undo.compress.threshold=64k
这里特别要注意的是这几个配置
# 自己命名一个vgroupMappingservice.vgroupMapping.mygroup=defaultservice.default.grouplist=127.0.0.1:8091service.enableDegrade=falseservice.disableGlobalTransaction=false
service.vgroupMapping.mygroup这个mygroup是可以自定义的看其他文章说加下划线的my_group会报错找不到所以建议用整个,后面的default是默认 也是可以改 但是!!!!!要和service.default.grouplist=127.0.0.1:8091的service后面的default一样 还要和conf里面的registry.conf 文件里面的cluster这个一样,都是可以修改 但是三者必须一样要不然也是报错;
接下来再添加一个配置文件dataId是service.vgroupMapping.mygroup也就是上面的配置文件的配置项 里面内容就default ;
注意:配置的分組要和seataServer.properties一样
4.项目测试
pom.xml
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-netflix-ribbon org.springframework.cloud spring-cloud-loadbalancer com.alibaba.cloud spring-cloud-starter-alibaba-seata io.seata seata-spring-boot-starter io.seata seata-spring-boot-starter 1.4.2 org.springframework.cloud spring-cloud-starter-openfeign org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test mysql mysql-connector-java com.baomidou mybatis-plus-boot-starter 3.5.1 seata-domain-service com.atguigu 1.0-SNAPSHOT compile
server: port: 2021spring: application: name: seata-order-service datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/seata_order?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC username: root password: xu20010502 cloud: nacos: discovery: server-addr: localhost:8848 group: SEATA_GROUPseata: tx-service-group: mygroup service: vgroup-mapping: mygroup: default
这里要把服务注册到nacos上分组要和seata一样要不然读取不到配置文件
配置启动类
@SpringBootApplication@EnableDiscoveryClient //注册到nacos@EnableFeignClients //开启feign@EnableAutoDataSourceProxy//seata启用自动数据源代理@MapperScan("com.atguigu.*")public class seataservice2021Main { public static void main(String[] args) { SpringApplication.run(seataservice2021Main.class, args); }}
接下来启动服务
启动成功