diff --git a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/impl/SeataAccountServiceImpl.java b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/impl/SeataAccountServiceImpl.java index d9127fe2..dbc7f79c 100644 --- a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/impl/SeataAccountServiceImpl.java +++ b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/impl/SeataAccountServiceImpl.java @@ -2,6 +2,7 @@ package org.jeecg.modules.test.seata.account.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; +import io.seata.core.context.RootContext; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.test.seata.account.entity.SeataAccount; @@ -34,6 +35,7 @@ public class SeataAccountServiceImpl implements SeataAccountService { @Override @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class) public void reduceBalance(Long userId, BigDecimal amount) { + log.info("xid:"+ RootContext.getXID()); log.info("=============ACCOUNT START================="); SeataAccount account = accountMapper.selectById(userId); Assert.notNull(account, "用户不存在"); diff --git a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/service/impl/SeataOrderServiceImpl.java b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/service/impl/SeataOrderServiceImpl.java index 48676cd5..ee7bb02b 100644 --- a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/service/impl/SeataOrderServiceImpl.java +++ b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/service/impl/SeataOrderServiceImpl.java @@ -1,6 +1,8 @@ package org.jeecg.modules.test.seata.order.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; +import io.seata.core.context.RootContext; import io.seata.spring.annotation.GlobalTransactional; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.test.seata.order.dto.PlaceOrderRequest; @@ -39,6 +41,7 @@ public class SeataOrderServiceImpl implements SeataOrderService { @Transactional(rollbackFor = Exception.class) @GlobalTransactional public void placeOrder(PlaceOrderRequest request) { + log.info("xid:"+RootContext.getXID()); log.info("=============ORDER START================="); Long userId = request.getUserId(); Long productId = request.getProductId(); @@ -58,7 +61,12 @@ public class SeataOrderServiceImpl implements SeataOrderService { // 扣减库存并计算总价 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.setTotalPrice(amount); diff --git a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/service/impl/SeataProductServiceImpl.java b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/service/impl/SeataProductServiceImpl.java index f7b91f75..448d8177 100644 --- a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/service/impl/SeataProductServiceImpl.java +++ b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/service/impl/SeataProductServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.test.seata.product.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; +import io.seata.core.context.RootContext; import lombok.extern.slf4j.Slf4j; @@ -35,6 +36,7 @@ public class SeataProductServiceImpl implements SeataProductService { @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class) @Override public BigDecimal reduceStock(Long productId, Integer count) { + log.info("xid:"+ RootContext.getXID()); log.info("=============PRODUCT START================="); // 检查库存 SeataProduct product = productMapper.selectById(productId); diff --git a/pom.xml b/pom.xml index 397d6c86..451879b6 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,8 @@ 2.17.0 1.2.9 + + 1.5.2 @@ -159,6 +161,12 @@ import + + io.seata + seata-spring-boot-starter + ${seata.version} + + org.jeecgframework.boot