Merge pull request #5480 from EightMonth/master

优化seata测试案例,使全局事务可以 回滚
pull/5563/head v3.6.0
JEECG 2023-10-20 13:59:54 +08:00 committed by GitHub
commit 04c55fa3ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.test.seata.account.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import io.seata.core.context.RootContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.test.seata.account.entity.SeataAccount; import org.jeecg.modules.test.seata.account.entity.SeataAccount;
@ -34,6 +35,7 @@ public class SeataAccountServiceImpl implements SeataAccountService {
@Override @Override
@Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class) @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
public void reduceBalance(Long userId, BigDecimal amount) { public void reduceBalance(Long userId, BigDecimal amount) {
log.info("xid:"+ RootContext.getXID());
log.info("=============ACCOUNT START================="); log.info("=============ACCOUNT START=================");
SeataAccount account = accountMapper.selectById(userId); SeataAccount account = accountMapper.selectById(userId);
Assert.notNull(account, "用户不存在"); Assert.notNull(account, "用户不存在");

View File

@ -1,6 +1,8 @@
package org.jeecg.modules.test.seata.order.service.impl; package org.jeecg.modules.test.seata.order.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional; import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.test.seata.order.dto.PlaceOrderRequest; import org.jeecg.modules.test.seata.order.dto.PlaceOrderRequest;
@ -39,6 +41,7 @@ public class SeataOrderServiceImpl implements SeataOrderService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@GlobalTransactional @GlobalTransactional
public void placeOrder(PlaceOrderRequest request) { public void placeOrder(PlaceOrderRequest request) {
log.info("xid:"+RootContext.getXID());
log.info("=============ORDER START================="); log.info("=============ORDER START=================");
Long userId = request.getUserId(); Long userId = request.getUserId();
Long productId = request.getProductId(); Long productId = request.getProductId();
@ -58,7 +61,12 @@ public class SeataOrderServiceImpl implements SeataOrderService {
// 扣减库存并计算总价 // 扣减库存并计算总价
BigDecimal amount = productClient.reduceStock(productId, count); BigDecimal amount = productClient.reduceStock(productId, count);
// 扣减余额 // 扣减余额
accountClient.reduceBalance(userId, amount); String str = accountClient.reduceBalance(userId, amount);
// feign响应被二次封装判断使主事务回滚
JSONObject jsonObject = JSONObject.parseObject(str);
if (jsonObject.getInteger("code") != 200) {
throw new RuntimeException();
}
order.setStatus(OrderStatus.SUCCESS); order.setStatus(OrderStatus.SUCCESS);
order.setTotalPrice(amount); order.setTotalPrice(amount);

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.test.seata.product.service.impl; package org.jeecg.modules.test.seata.product.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import io.seata.core.context.RootContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -35,6 +36,7 @@ public class SeataProductServiceImpl implements SeataProductService {
@Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class) @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
@Override @Override
public BigDecimal reduceStock(Long productId, Integer count) { public BigDecimal reduceStock(Long productId, Integer count) {
log.info("xid:"+ RootContext.getXID());
log.info("=============PRODUCT START================="); log.info("=============PRODUCT START=================");
// 检查库存 // 检查库存
SeataProduct product = productMapper.selectById(productId); SeataProduct product = productMapper.selectById(productId);

View File

@ -72,6 +72,8 @@
<!-- Log4j2爆雷漏洞 --> <!-- Log4j2爆雷漏洞 -->
<log4j2.version>2.17.0</log4j2.version> <log4j2.version>2.17.0</log4j2.version>
<logback.version>1.2.9</logback.version> <logback.version>1.2.9</logback.version>
<!-- seata -->
<seata.version>1.5.2</seata.version>
</properties> </properties>
<modules> <modules>
@ -159,6 +161,12 @@
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata.version}</version>
</dependency>
<!-- system 模块--> <!-- system 模块-->
<dependency> <dependency>
<groupId>org.jeecgframework.boot</groupId> <groupId>org.jeecgframework.boot</groupId>