文章目录
pom.xmlapplication.ymlresources/registry.conffile.confDataSourceProxyConfig数据库service
pom.xml
开启全局事务的服务和调用的服务都要有依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com
.alibaba
.cloud
</groupId
>
<artifactId>spring
-cloud
-alibaba
-dependencies
</artifactId
>
<version>2.1.0.RELEASE
</version
>
<type>pom
</type
>
<scope>import</scope
>
</dependency
>
</dependencies
>
</dependencyManagement
>
<dependencies>
<dependency>
<groupId>com
.alibaba
.cloud
</groupId
>
<artifactId>spring
-cloud
-starter
-alibaba
-seata
</artifactId
>
</dependency
>
</dependencies
>
application.yml
spring
:
cloud
:
alibaba
:
seata
:
#和file
.conf里面server
.vgroup_mapping一致
tx
-service
-group
: seata服务名
#DataSourceProxyConfig使用hikari要写hikari配置
datasource
:
hikari
:
driver
-class-name
: com
.mysql
.jdbc
.Driver
jdbc
-url
: jdbc
:mysql
://localhost
:3306/springcloud
?serverTimezone
=UTC
&characterEncoding
=utf
-8
username
: root
password
: root
resources/registry.conf
registry
{
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type
= "eureka"
nacos
{
serverAddr
= "localhost"
namespace
= ""
cluster
= "default"
}
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"
session
.timeout
= 6000
connect
.timeout
= 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、springCloudConfig
type
= "file"
nacos
{
serverAddr
= "localhost"
namespace
= ""
group
= "SEATA_GROUP"
}
consul
{
serverAddr
= "127.0.0.1:8500"
}
apollo
{
app
.id
= "seata-server"
apollo
.meta
= "http://192.168.1.204:8801"
namespace
= "application"
}
zk
{
serverAddr
= "127.0.0.1:2181"
session
.timeout
= 6000
connect
.timeout
= 2000
username
= ""
password
= ""
}
etcd3
{
serverAddr
= "http://localhost:2379"
}
file
{
name
= "file.conf"
}
}
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
= true
#thread factory
for netty
threadFactory
{
bossThreadPrefix
= "NettyBoss"
workerThreadPrefix
= "NettyServerNIOWorker"
serverExecutorThread
-prefix
= "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"
}
service
{
#transaction service group mapping
vgroup_mapping
.seata服务名
= "default" #原配置文件vgroupMapping会出bug
#only support when registry
.type
=file
, please don't set multiple addresses
default.grouplist
= "127.0.0.1:8091"
#degrade
, current not support
enableDegrade
= false
#disable seata
disableGlobalTransaction
= false
}
client
{
rm
{
asyncCommitBufferLimit
= 10000
lock
{
retryInterval
= 10
retryTimes
= 30
retryPolicyBranchRollbackOnConflict
= true
}
reportRetryCount
= 5
tableMetaCheckEnable
= false
reportSuccessEnable
= false
}
tm
{
commitRetryCount
= 5
rollbackRetryCount
= 5
}
undo
{
dataValidation
= true
logSerialization
= "jackson"
logTable
= "undo_log"
}
log
{
exceptionRate
= 100
}
}
DataSourceProxyConfig
@Configuration
public class DataSourceProxyConfig {
@Bean
@ConfigurationProperties(prefix
= "spring.datasource.hikari")
public DataSource
dataSource() {
return new HikariDataSource();
}
@Bean
public DataSourceProxy
dataSourceProxy(DataSource dataSource
) {
return new DataSourceProxy(dataSource
);
}
@Bean
public SqlSessionFactory
sqlSessionFactoryBean(DataSourceProxy dataSourceProxy
) throws Exception
{
SqlSessionFactoryBean sqlSessionFactoryBean
= new SqlSessionFactoryBean();
sqlSessionFactoryBean
.setDataSource(dataSourceProxy
);
return sqlSessionFactoryBean
.getObject();
}
}
数据库
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
service
@Autowired
ServerClient serverClient
;
@Autowried
LocalDao localDao
;
@GlobalTransactional
public void function(){
localDao
.function();
serverClient
.function();
}