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