MySQL 通过数据库文件安装 Seata 1.4.2 + Nacos 1.4.2 1. 准备工作 1.1 环境准备 MySQL 5.7+ Java 8+ Maven 3.0+ Nacos 1.4.2 Seata 1.4.2 1.2 创建数据库
CREATE DATABASE seata_db;
USE seata_db;
1.3 创建 Seata 需要的表结构
创建全局事务表
CREATE TABLEglobal_table
(
xid
VARCHAR(128) NOT NULL,
transaction_id
BIGINT,
status
TINYINT NOT NULL,
application_id
VARCHAR(32),
transaction_name
VARCHAR(128),
timeout
INT,
begin_time
BIGINT,
end_time
BIGINT,
globa_lock_status
TINYINT,
lock_key
VARCHAR(128),
create_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (xid
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建分支事务表
CREATE TABLEbranch_table
(
xid
VARCHAR(128) NOT NULL,
transaction_id
BIGINT,
resource_id
VARCHAR(256) NOT NULL,
branch_type
TINYINT,
status
TINYINT,
client_id
VARCHAR(32),
application_id
VARCHAR(32),
transaction_name
VARCHAR(128),
lock_key
VARCHAR(128),
branch_id
BIGINT,
create_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (xid
,branch_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建锁表
CREATE TABLElock_table
(
row_key
VARCHAR(128) NOT NULL,
xid
VARCHAR(128),
transaction_id
BIGINT,
branch_id
BIGINT,
resource_id
VARCHAR(256),
table_name
VARCHAR(32),
pk
VARCHAR(36),
global_lock_status
TINYINT,
lock_status
TINYINT,
lock_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
branch_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (row_key
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建锁表
CREATE TABLElock_table
(
row_key
VARCHAR(128) NOT NULL,
xid
VARCHAR(128),
transaction_id
BIGINT,
branch_id
BIGINT,
resource_id
VARCHAR(256),
table_name
VARCHAR(32),
pk
VARCHAR(36),
global_lock_status
TINYINT,
lock_status
TINYINT,
lock_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
branch_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (row_key
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建对账表
CREATE TABLElock_table
(
row_key
VARCHAR(128) NOT NULL,
xid
VARCHAR(128),
transaction_id
BIGINT,
branch_id
BIGINT,
resource_id
VARCHAR(256),
table_name
VARCHAR(32),
pk
VARCHAR(36),
global_lock_status
TINYINT,
lock_status
TINYINT,
lock_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
branch_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (row_key
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 安装 Nacos 2.1 下载 Nacos 从 [Nacos 官网](https://github.com/alibaba/nacos/releases) 下载 Nacos 1.4.2 版本的安装包。 2.2 解压并启动 Nacos
tar zxvf nacosserver1.4.2.tar.gz
cd nacosserver1.4.2
./bin/startup.sh m standalone
3. 安装 Seata 3.1 下载 Seata 从 [Seata 官网](https://github.com/seata/seata/releases) 下载 Seata 1.4.2 版本的安装包。 3.2 解压并配置 Seata
tar zxvf seataserver1.4.2.tar.gz
cd seataserver1.4.2
修改conf/file.conf
文件,配置 Nacos 服务注册中心:
nacos 配置
server��ode = standalone
nacos.mode = true
registry.address = nacos://127.0.0.1:8848
启动 Seata 服务:
./bin/seataserver.sh h 127.0.0.1 p 8091
4. 集成到应用 4.1 添加依赖 在你的项目中添加 Seata 和 Nacos 的依赖。 4.2 配置 Seata 在你的 Spring Boot 应用的配置文件中添加以下配置:
Seata 配置
seata.enable=true
seata.applicationid=your_application_id
seata.transactionservicegroup=your_transaction_service_group
seata.servernamingaddress=nacos://127.0.0.1:8848
seata.datasourcedatatype=mysql
seata.datasourceid=your_data_source_id
seata.maxwait=1
seata.mincommit=1
seata.maxretry=5
seata.lockreport=true
seata.locktimeout=10
seata.recovery=true
seata.disableglobaltransaction=true
4.3 编写业务代码 在你的业务代码中使用 Seata 的注解来控制分布式事务。
@Service
public class YourService {
@Transactional
public void yourMethod() {
// 业务逻辑
}
5. 验证 运行你的应用,执行包含分布式事务的业务方法,验证 Seata 和 Nacos 是否正常工作。 以上步骤详细介绍了如何通过数据库文件安装 Seata 1.4.2 和 Nacos 1.4.2,并集成到你的应用中。