GitHub下载1.4.2版本
第一个是源码
第二个是编译后的 建议都下载因为有些文件在0.9版本后面都没有了 比如 表的创建以及一些配置项
先进入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 data
CREATE 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 data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT 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 data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAr(128) NOT NULL,
`xid` VARCHAr(128),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT 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这个就是启动成功;
文件名字是特定的在registry.conf 的config下的nacos配置一样有个dataId对应的就nacos里面的配置文件名seataServer.properties; 分组也要是一致的当然你可以自己修改
里面就是下面这样
这里的配置项可以去官方的GitHub上的项目目录找
我这里就添一些常用的
transport.type=TCP transport.server=NIO transport.heartbeat=true transport.enableClientBatchSendRequest=true transport.threadFactory.bossThreadPrefix=NettyBoss transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler transport.threadFactory.shareBossWorker=false transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector transport.threadFactory.clientSelectorThreadSize=1 transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread transport.threadFactory.bossThreadSize=1 transport.threadFactory.workerThreadSize=default transport.shutdown.wait=3 transport.serialization=seata transport.compressor=none # server server.recovery.committingRetryPeriod=1000 server.recovery.asynCommittingRetryPeriod=1000 server.recovery.rollbackingRetryPeriod=1000 server.recovery.timeoutRetryPeriod=1000 server.undo.logSaveDays=7 server.undo.logDeletePeriod=86400000 server.maxCommitRetryTimeout=-1 server.maxRollbackRetryTimeout=-1 server.rollbackRetryTimeoutUnlockEnable=false server.distributedLockExpireTime=10000 # store #model改为db store.mode=db store.lock.mode=file store.session.mode=file # store.publicKey="" store.file.dir=file_store/data store.file.maxBranchSessionSize=16384 store.file.maxGlobalSessionSize=512 store.file.fileWriteBufferCacheSize=16384 store.file.flushDiskMode=async store.file.sessionReloadReadSize=100 store.db.datasource=druid store.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=xu20010502 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 store.redis.mode=single store.redis.single.host=127.0.0.1 store.redis.single.port=6379 # store.redis.sentinel.masterName="" # store.redis.sentinel.sentinelHosts="" store.redis.maxConn=10 store.redis.minConn=1 store.redis.maxTotal=100 store.redis.database=0 # store.redis.password="" store.redis.queryLimit=100 # log log.exceptionRate=100 # metrics metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898 # service # 自己命名一个vgroupMapping service.vgroupMapping.mygroup=default service.default.grouplist=127.0.0.1:8091 service.enableDegrade=false service.disableGlobalTransaction=false # client client.rm.asyncCommitBufferLimit=10000 client.rm.lock.retryInterval=10 client.rm.lock.retryTimes=30 client.rm.lock.retryPolicyBranchRollbackOnConflict=true client.rm.reportRetryCount=5 client.rm.tableMetaCheckEnable=false client.rm.tableMetaCheckerInterval=60000 client.rm.sqlParserType=druid client.rm.reportSuccessEnable=false client.rm.sagaBranchRegisterEnable=false client.rm.tccActionInterceptorOrder=-2147482648 client.tm.commitRetryCount=5 client.tm.rollbackRetryCount=5 client.tm.defaultGlobalTransactionTimeout=60000 client.tm.degradeCheck=false client.tm.degradeCheckAllowTimes=10 client.tm.degradeCheckPeriod=2000 client.tm.interceptorOrder=-2147482648 client.undo.dataValidation=true client.undo.logSerialization=jackson client.undo.onlyCareUpdateColumns=true client.undo.logTable=undo_log client.undo.compress.enable=true client.undo.compress.type=zip client.undo.compress.threshold=64k
这里特别要注意的是这几个配置
# 自己命名一个vgroupMapping service.vgroupMapping.mygroup=default service.default.grouplist=127.0.0.1:8091 service.enableDegrade=false service.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一样
pom.xml
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoveryorg.springframework.cloud spring-cloud-starter-netflix-ribbonorg.springframework.cloud spring-cloud-loadbalancercom.alibaba.cloud spring-cloud-starter-alibaba-seataio.seata seata-spring-boot-starterio.seata seata-spring-boot-starter1.4.2 org.springframework.cloud spring-cloud-starter-openfeignorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest mysql mysql-connector-javacom.baomidou mybatis-plus-boot-starter3.5.1 seata-domain-service com.atguigu 1.0-SNAPSHOT compile
server:
port: 2021
spring:
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_GROUP
seata:
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);
}
}
接下来启动服务
启动成功



