1.安装部署
1.1 下载安装包解压
1.2 修改配置
user = "mysql"
password = "mysql
- registry.conf 将type都换成nacos
type = "nacos"
1.3 启动seata-serve.bat
2.使用
seata:
tx-service-group: seckill-service-group
registry:
type: nacos
nacos:
server-addr: 127.0.0.1
group: SEATA_GROUP
application: seata-server
service:
vgroup-mapping:
seckill-service-group: default
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.2.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
@TwoPhaseBusinessAction(name = "decrIntegralTry",commitMethod = "decrIntegralCommit",rollbackMethod = "decrIntegralRollback")
void decrIntegralTry(@BusinessActionContextParameter(paramName = "vo") OperateIntergralVo vo, BusinessActionContext context);
void decrIntegralCommit(BusinessActionContext context);
void decrIntegralRollback(BusinessActionContext context);
@Override
@Transactional
public void decrIntegralTry(OperateIntergralVo vo, BusinessActionContext context) {
System.out.println("执行TRY方法");
AccountTransaction log = new AccountTransaction();
log.setTxId(context.getXid());
log.setActionId(context.getBranchId());
Date now = new Date();
log.setGmtCreated(now);
log.setGmtModified(now);
log.setUserId(vo.getUserId());
log.setAmount(vo.getValue());
accountTransactionMapper.insert(log);
int effectCount = usableIntegralMapper.decrIntergral(vo.getUserId(), vo.getValue());
if(effectCount==0){
throw new BusinessException(IntergralCodeMsg.INTERGRAL_NOT_ENOUGH);
}
}
@Override
public void decrIntegralCommit(BusinessActionContext context) {
System.out.println("执行COMMIT方法");
JSONObject jsonObject = (JSONObject) context.getActionContext("vo");
OperateIntergralVo vo = jsonObject.toJavaObject(OperateIntergralVo.class);
System.out.println("vo对-象:"+vo);
AccountTransaction accountTransaction = accountTransactionMapper.get(context.getXid(), context.getBranchId());
if(accountTransaction!=null){
if(AccountTransaction.STATE_TRY==accountTransaction.getState()){
accountTransactionMapper.updateAccountTransactionState(context.getXid(), context.getBranchId(), AccountTransaction.STATE_COMMIT, AccountTransaction.STATE_TRY);
}else if(AccountTransaction.STATE_COMMIT==accountTransaction.getState()){
}else{
}
}else{
}
}
@Override
@Transactional
public void decrIntegralRollback(BusinessActionContext context) {
System.out.println("执行ROLLBACK方法");
AccountTransaction accountTransaction = accountTransactionMapper.get(context.getXid(), context.getBranchId());
if(accountTransaction!=null){
if(AccountTransaction.STATE_TRY == accountTransaction.getState()){
accountTransactionMapper.updateAccountTransactionState(context.getXid(),context.getBranchId(),AccountTransaction.STATE_CANCEL,AccountTransaction.STATE_TRY);
usableIntegralMapper.incrIntergral(accountTransaction.getUserId(),accountTransaction.getAmount());
}else if (AccountTransaction.STATE_CANCEL == accountTransaction.getState()){
}else{
}
}else{
JSONObject jsonObject = (JSONObject) context.getActionContext("vo");
OperateIntergralVo vo = jsonObject.toJavaObject(OperateIntergralVo.class);
AccountTransaction log = new AccountTransaction();
log.setTxId(context.getXid());
log.setActionId(context.getBranchId());
Date now = new Date();
log.setGmtCreated(now);
log.setGmtModified(now);
log.setUserId(vo.getUserId());
log.setAmount(vo.getValue());
log.setState(AccountTransaction.STATE_CANCEL);
accountTransactionMapper.insert(log);
}
}
- 全局事务
@GlobalTransactional
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律