Commit 2cedf979c3ebe692bc0446a16ceff26d48cfb74a

Authored by zhangdaiscott
1 parent b9c0240c

JeecgBoot3.2.0 版本发布 [优化微服务模块]

Showing 35 changed files with 103 additions and 41 deletions
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/config/GatewayRoutersConfiguration.java
... ... @@ -2,6 +2,7 @@ package org.jeecg.config;
2 2  
3 3 import lombok.extern.slf4j.Slf4j;
4 4 import org.springframework.beans.factory.annotation.Value;
  5 +import org.springframework.cloud.context.config.annotation.RefreshScope;
5 6 import org.springframework.context.annotation.Bean;
6 7 import org.springframework.context.annotation.Configuration;
7 8 import org.springframework.http.MediaType;
... ... @@ -19,11 +20,9 @@ import static org.springframework.web.reactive.function.server.ServerResponse.ok
19 20 */
20 21 @Slf4j
21 22 @Configuration
  23 +@RefreshScope
22 24 public class GatewayRoutersConfiguration {
23   - /**
24   - * 路由配置方式:database,yml,nacos
25   - */
26   - public static String DATA_TYPE;
  25 +
27 26 public static final long DEFAULT_TIMEOUT = 30000;
28 27 public static String SERVER_ADDR;
29 28 public static String NAMESPACE;
... ... @@ -52,10 +51,6 @@ public class GatewayRoutersConfiguration {
52 51 ROUTE_GROUP = routeGroup;
53 52 }
54 53  
55   - @Value("${jeecg.route.config.data-type:#{null}}")
56   - public void setDataType(String dataType) {
57   - DATA_TYPE = dataType;
58   - }
59 54  
60 55 @Value("${spring.cloud.nacos.config.username}")
61 56 public void setUsername(String username) {
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/config/RouterDataType.java
... ... @@ -2,6 +2,8 @@ package org.jeecg.config;
2 2  
3 3 /**
4 4 * nocos配置方式枚举
  5 + * @author zyf
  6 + * @date: 2022/4/21 10:55
5 7 */
6 8 public enum RouterDataType {
7 9 /**
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/fallback/sentinel/GatewaySentinelExceptionConfig.java
... ... @@ -33,7 +33,7 @@ public class GatewaySentinelExceptionConfig {
33 33 } else {
34 34 msg = "未知限流降级";
35 35 }
36   - HashMap<String, String> map = new HashMap();
  36 + HashMap<String, String> map = new HashMap(5);
37 37 map.put("code", HttpStatus.TOO_MANY_REQUESTS.toString());
38 38 map.put("message", msg);
39 39 //自定义异常处理
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/filter/GlobalAccessTokenFilter.java
... ... @@ -30,22 +30,17 @@ public class GlobalAccessTokenFilter implements GlobalFilter, Ordered {
30 30  
31 31 @Override
32 32 public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
33   - String url = exchange.getRequest().getURI().getPath();
34   -// log.info(" access url : "+ url);
35 33  
36 34 String scheme = exchange.getRequest().getURI().getScheme();
37 35 String host = exchange.getRequest().getURI().getHost();
38 36 int port = exchange.getRequest().getURI().getPort();
39 37 String basePath = scheme + "://" + host + ":" + port;
40   -// log.info(" base path : "+ basePath);
41   -
42 38 // 1. 重写StripPrefix(获取真实的URL)
43 39 addOriginalRequestUrl(exchange, exchange.getRequest().getURI());
44 40 String rawPath = exchange.getRequest().getURI().getRawPath();
45 41 String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L).collect(Collectors.joining("/"));
46 42 ServerHttpRequest newRequest = exchange.getRequest().mutate().path(newPath).build();
47 43 exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
48   -
49 44 //2.将现在的request,添加当前身份
50 45 ServerHttpRequest mutableReq = exchange.getRequest().mutate().header("Authorization-UserName", "").header(X_GATEWAY_BASE_PATH,basePath).build();
51 46 ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/LoderRouderHandler.java
... ... @@ -11,6 +11,8 @@ import javax.annotation.Resource;
11 11  
12 12 /**
13 13 * 路由刷新监听(实现方式:redis监听handler)
  14 + * @author zyf
  15 + * @date: 2022/4/21 10:55
14 16 */
15 17 @Slf4j
16 18 @Component(GlobalConstants.LODER_ROUDER_HANDLER)
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/swagger/MySwaggerResourceProvider.java
1 1 package org.jeecg.handler.swagger;
2 2  
  3 +import cn.hutool.core.util.ArrayUtil;
3 4 import cn.hutool.core.util.ObjectUtil;
4 5 import com.alibaba.nacos.api.naming.NamingFactory;
5 6 import com.alibaba.nacos.api.naming.NamingService;
... ... @@ -21,6 +22,8 @@ import java.util.Set;
21 22  
22 23 /**
23 24 * 聚合各个服务的swagger接口
  25 + * @author zyf
  26 + * @date: 2022/4/21 10:55
24 27 */
25 28 @Component
26 29 @Slf4j
... ... @@ -42,6 +45,11 @@ public class MySwaggerResourceProvider implements SwaggerResourcesProvider {
42 45 @Value("${spring.cloud.nacos.discovery.server-addr}")
43 46 private String serverAddr;
44 47  
  48 + /**
  49 + * Swagger中需要排除的服务
  50 + */
  51 + private String[] excludeServiceIds=new String[]{"jeecg-cloud-monitor"};
  52 +
45 53  
46 54 /**
47 55 * 网关应用名称
... ... @@ -82,8 +90,8 @@ public class MySwaggerResourceProvider implements SwaggerResourcesProvider {
82 90 swaggerResource.setUrl(url);
83 91 swaggerResource.setSwaggerVersion("2.0");
84 92 swaggerResource.setName(instance);
85   - //Swagger排除监控
86   - if(instance.indexOf("jeecg-cloud-monitor")==-1){
  93 + //Swagger排除不展示的服务
  94 + if(!ArrayUtil.contains(excludeServiceIds,instance)){
87 95 resources.add(swaggerResource);
88 96 }
89 97 }
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/swagger/SwaggerResourceController.java
... ... @@ -11,6 +11,8 @@ import java.util.List;
11 11  
12 12 /**
13 13 * swagger聚合接口,三个接口都是 doc.html需要访问的接口
  14 + * @author zyf
  15 + * @date: 2022/4/21 10:55
14 16 */
15 17 @RestController
16 18 @RequestMapping("/swagger-resources")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java
... ... @@ -21,6 +21,8 @@ import org.jeecg.config.RouterDataType;
21 21 import org.jeecg.loader.repository.DynamicRouteService;
22 22 import org.jeecg.loader.repository.MyInMemoryRouteDefinitionRepository;
23 23 import org.jeecg.loader.vo.MyRouteDefinition;
  24 +import org.springframework.beans.factory.annotation.Value;
  25 +import org.springframework.cloud.context.config.annotation.RefreshScope;
24 26 import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
25 27 import org.springframework.cloud.gateway.filter.FilterDefinition;
26 28 import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
... ... @@ -49,6 +51,7 @@ import java.util.concurrent.Executor;
49 51 @Slf4j
50 52 @Component
51 53 @DependsOn({"gatewayRoutersConfiguration"})
  54 +@RefreshScope
52 55 public class DynamicRouteLoader implements ApplicationEventPublisherAware {
53 56  
54 57  
... ... @@ -57,6 +60,12 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware {
57 60 private DynamicRouteService dynamicRouteService;
58 61 private ConfigService configService;
59 62 private RedisUtil redisUtil;
  63 +
  64 + /**
  65 + * 路由配置方式:database(数据库),yml(配置文件),nacos
  66 + */
  67 + @Value("${jeecg.route.config.data-type:database}")
  68 + public String dataType;
60 69 /**
61 70 * 需要拼接key的路由条件
62 71 */
... ... @@ -76,7 +85,6 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware {
76 85  
77 86  
78 87 public void init(BaseMap baseMap) {
79   - String dataType = GatewayRoutersConfiguration.DATA_TYPE;
80 88 log.info("初始化路由,dataType:"+ dataType);
81 89 if (RouterDataType.nacos.toString().endsWith(dataType)) {
82 90 loadRoutesByNacos();
... ... @@ -92,7 +100,6 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware {
92 100 * @return
93 101 */
94 102 public Mono<Void> refresh(BaseMap baseMap) {
95   - String dataType = GatewayRoutersConfiguration.DATA_TYPE;
96 103 if (!RouterDataType.yml.toString().endsWith(dataType)) {
97 104 this.init(baseMap);
98 105 }
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/repository/DynamicRouteService.java
... ... @@ -59,7 +59,6 @@ public class DynamicRouteService implements ApplicationEventPublisherAware {
59 59 public synchronized String update(RouteDefinition definition) {
60 60 try {
61 61 log.info("gateway update route {}", definition);
62   - //delete(definition.getId());
63 62 } catch (Exception e) {
64 63 return "update fail,not find route routeId: " + definition.getId();
65 64 }
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/vo/GatewayRouteVo.java
... ... @@ -2,6 +2,11 @@ package org.jeecg.loader.vo;
2 2  
3 3 import lombok.Data;
4 4  
  5 +/**
  6 + * 路由参数模型
  7 + * @author zyf
  8 + * @date: 2022/4/21 10:55
  9 + */
5 10 @Data
6 11 public class GatewayRouteVo {
7 12 private String id;
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-monitor/src/main/java/org/jeecg/monitor/JeecgMonitorApplication.java
... ... @@ -6,6 +6,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
6 6  
7 7 /**
8 8 * 监控服务
  9 + * @author zyf
  10 + * @date: 2022/4/21 10:55
9 11 */
10 12 @SpringBootApplication
11 13 @EnableAdminServer
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-nacos/src/main/java/com/alibaba/nacos/JeecgNacosApplication.java
... ... @@ -8,8 +8,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
8 8  
9 9 /**
10 10 * Nacos 启动类
11   - * 引用的nacos console 源码运行,简化开发
12   - * 生产建议从官网下载最新版配置运行
  11 + *
13 12 * @author zyf
14 13 */
15 14 @SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java
... ... @@ -22,6 +22,8 @@ import java.net.UnknownHostException;
22 22 /**
23 23 * 微服务启动类(采用此类启动项目为微服务模式)
24 24 * 注意: 需要先在naocs里面创建配置文件,参考文档 http://doc.jeecg.com/2704725
  25 + * @author zyf
  26 + * @date: 2022/4/21 10:55
25 27 */
26 28 @Slf4j
27 29 @SpringBootApplication
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java
... ... @@ -2,6 +2,8 @@ package org.jeecg.modules.test.constant;
2 2  
3 3 /**
4 4 * 微服务单元测试常量定义
  5 + * @author: zyf
  6 + * @date: 2022/04/21
5 7 */
6 8 public interface CloudConstant {
7 9  
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java
... ... @@ -9,17 +9,22 @@ import org.jeecg.modules.test.feign.factory.JeecgTestClientFactory;
9 9 import org.springframework.cloud.openfeign.FeignClient;
10 10 import org.springframework.stereotype.Component;
11 11 import org.springframework.web.bind.annotation.GetMapping;
12   -import org.springframework.web.bind.annotation.Mapping;
13   -import org.springframework.web.bind.annotation.PostMapping;
14 12 import org.springframework.web.bind.annotation.RequestParam;
15 13  
16 14 /**
17 15 * 常规feign接口定义
  16 + * @author: zyf
  17 + * @date: 2022/04/21
18 18 */
19 19 @FeignClient(value = ServiceNameConstants.SERVICE_DEMO, configuration = FeignConfig.class,fallbackFactory = JeecgTestClientFactory.class)
20 20 @Component
21 21 public interface JeecgTestClient {
22 22  
  23 + /**
  24 + * feign测试方法
  25 + * @param name
  26 + * @return
  27 + */
23 28 @GetMapping(value = "/test/getMessage")
24 29 String getMessage(@RequestParam(value = "name",required = false) String name);
25 30 }
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java
... ... @@ -12,7 +12,11 @@ import com.alibaba.csp.sentinel.annotation.SentinelResource;
12 12 import io.swagger.annotations.Api;
13 13 import io.swagger.annotations.ApiOperation;
14 14  
15   -
  15 +/**
  16 + * 微服务单元测试
  17 + * @author: zyf
  18 + * @date: 2022/04/21
  19 + */
16 20 @Slf4j
17 21 @RestController
18 22 @RequestMapping("/sys/test")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java
... ... @@ -14,6 +14,8 @@ import java.util.Map;
14 14  
15 15 /**
16 16 * 分布式锁测试demo
  17 + * @author: zyf
  18 + * @date: 2022/04/21
17 19 */
18 20 @Slf4j
19 21 @Component
... ... @@ -50,10 +52,11 @@ public class DemoLockTest {
50 52  
51 53 /**
52 54 * 测试分布式锁【编码方式】
  55 + * @Scheduled(cron = "0/5 * * * * ?")
53 56 */
54   - //@Scheduled(cron = "0/5 * * * * ?")
55 57 public void execute2() throws InterruptedException {
56   - if (redissonLock.tryLock(CloudConstant.REDISSON_DEMO_LOCK_KEY2, -1, 6000)) {
  58 + int expireSeconds=6000;
  59 + if (redissonLock.tryLock(CloudConstant.REDISSON_DEMO_LOCK_KEY2, -1, expireSeconds)) {
57 60 log.info("执行任务execute2开始,休眠十秒");
58 61 Thread.sleep(10000);
59 62 log.info("=============业务逻辑2===================");
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java
... ... @@ -20,6 +20,8 @@ import java.util.Arrays;
20 20  
21 21 /**
22 22 * xxl-job定时任务测试
  23 + * @author: zyf
  24 + * @date: 2022/04/21
23 25 */
24 26 @Component
25 27 @Slf4j
... ... @@ -113,7 +115,8 @@ public class DemoJobHandler {
113 115 */
114 116 @XxlJob("httpJobHandler")
115 117 public ReturnT<String> httpJobHandler(String param) throws Exception {
116   -
  118 + String[] methodArray=new String[]{"GET","POST"};
  119 + int okState=200;
117 120 // param parse
118 121 if (param == null || param.trim().length() == 0) {
119 122 log.info("param[" + param + "] invalid.");
... ... @@ -140,7 +143,7 @@ public class DemoJobHandler {
140 143 log.info("url[" + url + "] invalid.");
141 144 return ReturnT.FAIL;
142 145 }
143   - if (method == null || !Arrays.asList("GET", "POST").contains(method)) {
  146 + if (method == null || !Arrays.asList(methodArray).contains(method)) {
144 147 log.info("method[" + method + "] invalid.");
145 148 return ReturnT.FAIL;
146 149 }
... ... @@ -177,7 +180,7 @@ public class DemoJobHandler {
177 180  
178 181 // valid StatusCode
179 182 int statusCode = connection.getResponseCode();
180   - if (statusCode != 200) {
  183 + if (statusCode != okState) {
181 184 throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");
182 185 }
183 186  
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java
... ... @@ -6,9 +6,10 @@ import com.xxl.job.core.handler.annotation.XxlJob;
6 6 import lombok.extern.slf4j.Slf4j;
7 7 import org.springframework.stereotype.Component;
8 8  
9   -
10 9 /**
11   - * xxl-job定时任务测试
  10 + * xxl-job定时任务测试
  11 + * @author: zyf
  12 + * @date: 2022/04/21
12 13 */
13 14 @Component
14 15 @Slf4j
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java
... ... @@ -2,6 +2,8 @@ package org.jeecg.modules.test.rabbitmq.constant;
2 2  
3 3 /**
4 4 * 微服务单元测试常量定义
  5 + * @author: zyf
  6 + * @date: 2022/04/21
5 7 */
6 8 public interface CloudConstant {
7 9  
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java
... ... @@ -19,6 +19,8 @@ import io.swagger.annotations.ApiOperation;
19 19  
20 20 /**
21 21 * RabbitMqClient发送消息
  22 + * @author: zyf
  23 + * @date: 2022/04/21
22 24 */
23 25 @RestController
24 26 @RequestMapping("/sys/test")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java
... ... @@ -11,6 +11,8 @@ import lombok.extern.slf4j.Slf4j;
11 11  
12 12 /**
13 13 * 消息处理器【发布订阅】
  14 + * @author: zyf
  15 + * @date: 2022/04/21
14 16 */
15 17 @Slf4j
16 18 @Component(CloudConstant.MQ_DEMO_BUS_EVENT)
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java
... ... @@ -21,6 +21,8 @@ import lombok.extern.slf4j.Slf4j;
21 21 *
22 22 * RabbitMq接受者1
23 23 * (@RabbitListener声明类上,一个类只能监听一个队列)
  24 + * @author: zyf
  25 + * @date: 2022/04/21
24 26 */
25 27 @Slf4j
26 28 @RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER)
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java
... ... @@ -17,6 +17,8 @@ import org.springframework.messaging.handler.annotation.Header;
17 17 *
18 18 * RabbitMq接受者2
19 19 * (@RabbitListener声明类上,一个类只能监听一个队列)
  20 + * @author: zyf
  21 + * @date: 2022/04/21
20 22 */
21 23 @Slf4j
22 24 @RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER)
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java
... ... @@ -16,6 +16,8 @@ import org.springframework.messaging.handler.annotation.Header;
16 16 *
17 17 * RabbitMq接受者3【我是处理人3】
18 18 * (@RabbitListener声明类方法上,一个类可以多监听多个队列)
  19 + * @author: zyf
  20 + * @date: 2022/04/21
19 21 */
20 22 @Slf4j
21 23 @RabbitComponent(value = "helloReceiver3")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java
... ... @@ -14,6 +14,11 @@ import com.rabbitmq.client.Channel;
14 14  
15 15 import lombok.extern.slf4j.Slf4j;
16 16  
  17 +/**
  18 + * 定义接收者(可以定义N个接受者,消息会均匀的发送到N个接收者中)
  19 + * @author: zyf
  20 + * @date: 2022/04/21
  21 + */
17 22 @Slf4j
18 23 @RabbitListener(queues = CloudConstant.MQ_JEECG_PLACE_ORDER_TIME)
19 24 @RabbitComponent(value = "helloTimeReceiver")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/SeataAccountService.java
... ... @@ -10,6 +10,7 @@ import java.math.BigDecimal;
10 10 */
11 11 public interface SeataAccountService {
12 12 /**
  13 + * 扣减金额
13 14 * @param userId 用户 ID
14 15 * @param amount 扣减金额
15 16 */
... ...
jeecg-boot/jeecg-cloud-module/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
... ... @@ -32,7 +32,7 @@ public class SeataAccountServiceImpl implements SeataAccountService {
32 32 */
33 33 @DS("account")
34 34 @Override
35   - @Transactional(propagation = Propagation.REQUIRES_NEW)
  35 + @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
36 36 public void reduceBalance(Long userId, BigDecimal amount) {
37 37 log.info("=============ACCOUNT START=================");
38 38 SeataAccount account = accountMapper.selectById(userId);
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/feign/ProductClient.java
... ... @@ -6,6 +6,11 @@ import org.springframework.web.bind.annotation.RequestParam;
6 6  
7 7 import java.math.BigDecimal;
8 8  
  9 +/**
  10 + * 分布式事务产品feign客户端
  11 + * @author: zyf
  12 + * @date: 2022/04/21
  13 + */
9 14 @FeignClient(value ="seata-product")
10 15 public interface ProductClient {
11 16 /**
... ...
jeecg-boot/jeecg-cloud-module/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
... ... @@ -36,7 +36,7 @@ public class SeataOrderServiceImpl implements SeataOrderService {
36 36  
37 37 @DS("order")
38 38 @Override
39   - @Transactional
  39 + @Transactional(rollbackFor = Exception.class)
40 40 @GlobalTransactional
41 41 public void placeOrder(PlaceOrderRequest request) {
42 42 log.info("=============ORDER START=================");
... ...
jeecg-boot/jeecg-cloud-module/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
... ... @@ -32,7 +32,7 @@ public class SeataProductServiceImpl implements SeataProductService {
32 32 * 事务传播特性设置为 REQUIRES_NEW 开启新的事务
33 33 */
34 34 @DS("product")
35   - @Transactional(propagation = Propagation.REQUIRES_NEW)
  35 + @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
36 36 @Override
37 37 public BigDecimal reduceStock(Long productId, Integer count) {
38 38 log.info("=============PRODUCT START=================");
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java
... ... @@ -35,7 +35,8 @@ public class JeecgShardingDemoController extends JeecgController&lt;ShardingSysLog,
35 35 @PostMapping(value = "/test1")
36 36 @ApiOperation(value = "单库分表插入", notes = "单库分表")
37 37 public Result<?> add() {
38   - for (int i = 0; i < 10; i++) {
  38 + int size=10;
  39 + for (int i = 0; i < size; i++) {
39 40 ShardingSysLog shardingSysLog = new ShardingSysLog();
40 41 shardingSysLog.setLogContent("jeecg");
41 42 shardingSysLog.setLogType(i);
... ... @@ -62,7 +63,9 @@ public class JeecgShardingDemoController extends JeecgController&lt;ShardingSysLog,
62 63 @PostMapping(value = "/test2")
63 64 @ApiOperation(value = "双库分表插入", notes = "双库分表")
64 65 public Result<?> test2() {
65   - for (int i = 20; i <= 30; i++) {
  66 + int start=20;
  67 + int size=30;
  68 + for (int i = start; i <= size; i++) {
66 69 ShardingSysLog shardingSysLog = new ShardingSysLog();
67 70 shardingSysLog.setLogContent("双库分表测试");
68 71 shardingSysLog.setLogType(i);
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/entity/ShardingSysLog.java
... ... @@ -14,9 +14,9 @@ import java.io.Serializable;
14 14 import java.util.Date;
15 15  
16 16 /**
17   - * <p>
18 17 * 系统日志表
19   - * </p>
  18 + * @author: zyf
  19 + * @date: 2022/04/21
20 20 */
21 21 @Data
22 22 @TableName("sys_log")
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/mapper/xml/ShardingSysLogMapper.xml
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3   -<mapper namespace="org.jeecg.modules.demo.sharding.mapper.ShardingSysLogMapper">
  3 +<mapper namespace="org.jeecg.modules.test.sharding.mapper.ShardingSysLogMapper">
4 4  
5 5 </mapper>
... ...
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/impl/ShardingSysLogServiceImpl.java
... ... @@ -8,9 +8,9 @@ import org.jeecg.modules.test.sharding.service.IShardingSysLogService;
8 8 import org.springframework.stereotype.Service;
9 9  
10 10 /**
11   - * <p>
12 11 * 系统日志表 服务实现类
13   - * </p>
  12 + * @author: zyf
  13 + * @date: 2022/04/21
14 14 */
15 15 @Service
16 16 @DS("sharding")
... ...