Pārlūkot izejas kodu

sleuth错误处理

yingp 7 gadi atpakaļ
vecāks
revīzija
3c95cdbe9f
23 mainītis faili ar 294 papildinājumiem un 86 dzēšanām
  1. 18 3
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java
  2. 1 3
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/RoleResource.java
  3. 6 0
      base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml
  4. 16 12
      base-servers/gateway-server/pom.xml
  5. 24 0
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/error/MyExceptionAdvice.java
  6. 5 8
      base-servers/gateway-server/src/main/resources/application.yml
  7. 15 0
      base-servers/gateway-server/src/main/resources/banner.txt
  8. 3 3
      base-servers/ui-server/pom.xml
  9. 1 4
      base-servers/ui-server/src/main/java/com/usoftchina/saas/ui/controller/co/CoViewController.java
  10. 5 4
      base-servers/ui-server/src/main/resources/application.yml
  11. 1 1
      base-servers/ui-server/src/test/java/com/usoftchina/saas/ui/test/ViewServiceTest.java
  12. 5 0
      base-servers/zipkin-server/pom.xml
  13. 2 2
      base-servers/zipkin-server/src/main/java/com/usoftchina/saas/zipkin/ZipkinApplication.java
  14. 2 0
      base-servers/zipkin-server/src/main/resources/application.yml
  15. 0 3
      base-servers/zipkin-server/src/main/resources/config/application-docker.yml
  16. 4 0
      framework/core/src/main/java/com/usoftchina/saas/base/Result.java
  17. 19 1
      framework/server-starter/src/main/java/com/usoftchina/saas/server/ServerAutoConfiguration.java
  18. 25 0
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ErrorConfig.java
  19. 53 0
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/GlobalExceptionHandler.java
  20. 0 41
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/MyErrorController.java
  21. 52 0
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ServletErrorUtils.java
  22. 36 0
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/UnCaughtErrorFilter.java
  23. 1 1
      pom.xml

+ 18 - 3
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java

@@ -1,11 +1,26 @@
 package com.usoftchina.saas.account.mapper;
 
-import com.usoftchina.saas.account.po.RoleResource;
-import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author yingp
  * @date 2018/10/2
  */
-public interface RoleResourceMapper extends CommonBaseMapper<RoleResource> {
+public interface RoleResourceMapper {
+    /**
+     * 新增
+     *
+     * @param roleId
+     * @param resourceId
+     * @return
+     */
+    int insert(@Param("roleId") Long roleId, @Param("resourceId") Long resourceId);
+
+    /**
+     * 删除
+     *
+     * @param roleId
+     * @param resourceId
+     */
+    void delete(@Param("roleId") Long roleId, @Param("resourceId") Long resourceId);
 }

+ 1 - 3
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/RoleResource.java

@@ -1,7 +1,5 @@
 package com.usoftchina.saas.account.po;
 
-import com.usoftchina.saas.base.entity.CommonBaseEntity;
-
 import java.io.Serializable;
 
 /**
@@ -10,7 +8,7 @@ import java.io.Serializable;
  * @author yingp
  * @date 2018/10/2
  */
-public class RoleResource extends CommonBaseEntity implements Serializable {
+public class RoleResource implements Serializable {
     private long roleId;
     private long resourceId;
 

+ 6 - 0
base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml

@@ -1,4 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.usoftchina.saas.account.mapper.RoleResourceMapper">
+    <insert id="insert">
+        insert into ac_role_resource(role_id,resource_id) values (#{roleId}, #{resourceId})
+    </insert>
+    <delete id="delete">
+        delete from ac_role_resource where role_id=#{roleId} and resource_id=#{resourceId}
+    </delete>
 </mapper>

+ 16 - 12
base-servers/gateway-server/pom.xml

@@ -11,14 +11,23 @@
 
     <artifactId>gateway-server</artifactId>
     <description>gateway server</description>
-    <properties>
-        <ratelimit.version>2.1.0.RELEASE</ratelimit.version>
-    </properties>
 
     <dependencies>
         <dependency>
-            <groupId>com.usoftchina.saas</groupId>
-            <artifactId>server-starter</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-webflux</artifactId>
         </dependency>
         <!--<dependency>
             <groupId>org.springframework.boot</groupId>
@@ -33,24 +42,19 @@
             <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
         </dependency>
         <!-- rate limit -->
-        <!--<dependency>
-            <groupId>com.marcosbarbero.cloud</groupId>
-            <artifactId>spring-cloud-zuul-ratelimit</artifactId>
-            <version>${ratelimit.version}</version>
-        </dependency>-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
         <!-- sleuth -->
-        <!--<dependency>
+        <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-zipkin</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.amqp</groupId>
             <artifactId>spring-rabbit</artifactId>
-        </dependency>-->
+        </dependency>
         <!-- auth -->
         <dependency>
             <groupId>com.usoftchina.saas</groupId>

+ 24 - 0
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/error/MyExceptionAdvice.java

@@ -0,0 +1,24 @@
+package com.usoftchina.saas.gateway.error;
+
+import com.usoftchina.saas.base.Result;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * @author yingp
+ * @date 2018/10/15
+ */
+@RestControllerAdvice
+public class MyExceptionAdvice {
+
+    @ExceptionHandler(Exception.class)
+    @ResponseStatus(HttpStatus.OK)
+    @ResponseBody
+    public Result serverExceptionHandler(Exception ex) {
+        return Result.throwable(ex);
+    }
+
+}

+ 5 - 8
base-servers/gateway-server/src/main/resources/application.yml

@@ -17,15 +17,12 @@ spring:
   zipkin:
     sender:
       type: rabbit
-    service:
-      name: ${spring.application.name}
+    locator:
+      discovery:
+        enabled: true
   sleuth:
     sampler:
-      percentage: 1
-    integration:
-      enabled: false
-    scheduled:
-      skip-pattern: "^org.*HystrixStreamTask$"
+      probability: 1.0
   cloud:
     gateway:
       discovery:
@@ -114,7 +111,7 @@ eureka:
   client:
     registryFetchIntervalSeconds: 5
     serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8500/eureka/
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:8500/eureka/
 feign:
   hystrix:
     enabled: true

+ 15 - 0
base-servers/gateway-server/src/main/resources/banner.txt

@@ -0,0 +1,15 @@
+${AnsiColor.BRIGHT_YELLOW}
+
+88        88   ad88888ba     ,ad8888ba,    88888888888  888888888888  ,ad8888ba,   88        88  88  888b      88         db
+88        88  d8"     "8b   d8"'    `"8b   88                88      d8"'    `"8b  88        88  88  8888b     88        d88b
+88        88  Y8,          d8'        `8b  88                88     d8'            88        88  88  88 `8b    88       d8'`8b
+88        88  `Y8aaaaa,    88          88  88aaaaa           88     88             88aaaaaaaa88  88  88  `8b   88      d8'  `8b
+88        88    `"""""8b,  88          88  88"""""           88     88             88""""""""88  88  88   `8b  88     d8YaaaaY8b
+88        88          `8b  Y8,        ,8P  88                88     Y8,            88        88  88  88    `8b 88    d8""""""""8b
+Y8a.    .a8P  Y8a     a8P   Y8a.    .a8P   88                88      Y8a.    .a8P  88        88  88  88     `8888   d8'        `8b
+ `"Y8888Y"'    "Y88888P"     `"Y8888Y"'    88                88       `"Y8888Y"'   88        88  88  88      `888  d8'          `8b
+
+
+Application Version: ${application.version}${application.formatted-version}
+Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}
+${AnsiColor.DEFAULT}

+ 3 - 3
base-servers/ui-server/pom.xml

@@ -27,15 +27,15 @@
             <artifactId>spring-boot-starter-data-mongodb</artifactId>
         </dependency>
         <!-- sleuth -->
-        <!--<dependency>
+        <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-zipkin</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.amqp</groupId>
             <artifactId>spring-rabbit</artifactId>
-        </dependency>-->
-
+        </dependency>
+        <!-- test -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>

+ 1 - 4
base-servers/ui-server/src/main/java/com/usoftchina/saas/ui/controller/co/CoViewController.java

@@ -5,10 +5,7 @@ import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.ui.service.ViewService;
 import com.usoftchina.saas.ui.service.co.CoViewService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author yingp

+ 5 - 4
base-servers/ui-server/src/main/resources/application.yml

@@ -13,11 +13,12 @@ spring:
   zipkin:
     sender:
       type: rabbit
-    service:
-      name: ${spring.application.name}
+    locator:
+      discovery:
+        enabled: true
   sleuth:
     sampler:
-      percentage: 1.0
+      probability: 1.0
   data:
     mongodb:
       uri: mongodb://192.168.253.12:27017/saas_ui
@@ -37,7 +38,7 @@ eureka:
   client:
     registryFetchIntervalSeconds: 5
     serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8500/eureka/
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:8500/eureka/
 info:
   name: '@project.artifactId@'
   description: '@project.description@'

+ 1 - 1
base-servers/ui-server/src/test/java/com/usoftchina/saas/ui/test/ViewServiceTest.java

@@ -30,7 +30,7 @@ public class ViewServiceTest {
     @Autowired
     private ComponentService componentService;
 
-    private String viewName = "test.form";
+    private String viewName = "junit.test.form";
 
     @Before
     public void generateData() {

+ 5 - 0
base-servers/zipkin-server/pom.xml

@@ -46,6 +46,11 @@
             <groupId>io.zipkin.java</groupId>
             <artifactId>zipkin-autoconfigure-storage-mysql</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.jooq</groupId>
+            <artifactId>jooq</artifactId>
+            <version>3.11.4</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 2 - 2
base-servers/zipkin-server/src/main/java/com/usoftchina/saas/zipkin/ZipkinApplication.java

@@ -2,7 +2,7 @@ package com.usoftchina.saas.zipkin;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+//import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import zipkin2.server.internal.EnableZipkinServer;
 
 /**
@@ -11,7 +11,7 @@ import zipkin2.server.internal.EnableZipkinServer;
  */
 @EnableZipkinServer
 @SpringBootApplication
-@EnableEurekaClient
+//@EnableEurekaClient
 public class ZipkinApplication {
     public static void main(String[] args) {
         SpringApplication.run(ZipkinApplication.class, args);

+ 2 - 0
base-servers/zipkin-server/src/main/resources/application.yml

@@ -14,6 +14,7 @@ eureka:
     leaseRenewalIntervalInSeconds: 10
     health-check-url-path: /actuator/health
     status-page-url-path: /actuator/info
+    prefer-ip-address: true
     metadata-map:
       user.name: ${spring.security.user.name}
       user.password: ${spring.security.user.password}
@@ -35,6 +36,7 @@ zipkin:
       password: guest
       queue: zipkin
   storage:
+    type: mysql
     mysql:
       host: 192.168.253.12
       username: root

+ 0 - 3
base-servers/zipkin-server/src/main/resources/config/application-docker.yml

@@ -1,7 +1,4 @@
 eureka:
-  instance:
-    hostname: saas-zipkin-server
-    prefer-ip-address: false
   client:
     serviceUrl:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/

+ 4 - 0
framework/core/src/main/java/com/usoftchina/saas/base/Result.java

@@ -101,6 +101,10 @@ public class Result<T> implements Serializable {
 
     public static Result throwable(Throwable e) {
         Result result = error();
+        if (e instanceof BaseException) {
+            return error((BaseException) e);
+        }
+        result.setCode(500);
         result.setMessage(e.getMessage());
         return result;
     }

+ 19 - 1
framework/server-starter/src/main/java/com/usoftchina/saas/server/ServerAutoConfiguration.java

@@ -1,7 +1,14 @@
 package com.usoftchina.saas.server;
 
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.lang.Nullable;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * @author yingp
@@ -10,5 +17,16 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 @ComponentScan(basePackages = {"com.usoftchina.saas.server"})
 public class ServerAutoConfiguration {
-    
+
+    @Bean
+    public HandlerExceptionResolver handlerExceptionResolver() {
+        return new HandlerExceptionResolver(){
+            @Nullable
+            @Override
+            public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, @Nullable Object o, Exception e) {
+                System.err.println("############" + request.getRequestURI() + "#" + response.getStatus());
+                return null;
+            }
+        };
+    }
 }

+ 25 - 0
framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ErrorConfig.java

@@ -0,0 +1,25 @@
+package com.usoftchina.saas.server.error;
+
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+
+import javax.servlet.DispatcherType;
+
+/**
+ * @author yingp
+ * @date 2018/10/16
+ */
+@Configuration
+public class ErrorConfig {
+
+    @Bean
+    public FilterRegistrationBean<UnCaughtErrorFilter> unCaughtErrorFilter() {
+        UnCaughtErrorFilter filter = new UnCaughtErrorFilter();
+        FilterRegistrationBean<UnCaughtErrorFilter> registration = new FilterRegistrationBean<>(filter);
+        registration.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
+        registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
+        return registration;
+    }
+}

+ 53 - 0
framework/server-starter/src/main/java/com/usoftchina/saas/server/error/GlobalExceptionHandler.java

@@ -0,0 +1,53 @@
+package com.usoftchina.saas.server.error;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.exception.BizException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author yingp
+ * @date 2018/10/16
+ */
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+    /**
+     * 默认异常处理
+     *
+     * @param request
+     * @param e
+     * @return
+     * @throws Exception
+     */
+    @ExceptionHandler(value = Exception.class)
+    @ResponseBody
+    public Result defaultHandler(HttpServletRequest request, Exception e) throws Exception{
+        String error = ServletErrorUtils.buildMessage(request, e);
+        logger.error(error, e);
+        return Result.error(500, error);
+    }
+
+    /**
+     * 业务异常
+     *
+     * @param request
+     * @param e
+     * @return
+     * @throws Exception
+     */
+    @ExceptionHandler(value = BizException.class)
+    @ResponseBody
+    public Result bizHandler(HttpServletRequest request, BizException e) throws Exception{
+        String error = ServletErrorUtils.buildMessage(request, e);
+        logger.error(error, e);
+        return Result.error(e);
+    }
+}

+ 0 - 41
framework/server-starter/src/main/java/com/usoftchina/saas/server/error/MyErrorController.java

@@ -1,41 +0,0 @@
-package com.usoftchina.saas.server.error;
-
-import org.springframework.boot.autoconfigure.web.ServerProperties;
-import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
-import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author yingp
- * @date 2018/10/13
- */
-@Controller
-public class MyErrorController extends BasicErrorController {
-
-    public MyErrorController(ServerProperties serverProperties) {
-        super(new DefaultErrorAttributes(), serverProperties.getError());
-    }
-
-    /**
-     * 覆盖默认的错误响应
-     */
-    @Override
-    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
-        Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
-        HttpStatus status = getStatus(request);
-        // 输出自定义格式
-        Map<String, Object> map = new HashMap<>(4);
-        map.put("success", false);
-        map.put("code", body.get("status"));
-        map.put("message", body.get("message"));
-        map.put("data", null);
-        return new ResponseEntity<>(map, status);
-    }
-}

+ 52 - 0
framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ServletErrorUtils.java

@@ -0,0 +1,52 @@
+package com.usoftchina.saas.server.error;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.utils.JsonUtils;
+import org.springframework.http.MediaType;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author yingp
+ * @date 2018/10/16
+ */
+public class ServletErrorUtils {
+    /**
+     * 构建异常信息
+     *
+     * @param request
+     * @param ex
+     * @return
+     */
+    public static String buildMessage(HttpServletRequest request, Throwable ex) {
+        StringBuilder message = new StringBuilder("Failed to handle request [");
+        message.append(request.getMethod());
+        message.append(" ");
+        message.append(request.getRequestURI());
+        message.append("]");
+        if (ex != null) {
+            message.append(": ");
+            message.append(ex.getMessage());
+        }
+        return message.toString();
+    }
+
+    /**
+     * 标准Result格式输出
+     *
+     * @param response
+     * @param e
+     * @throws IOException
+     * @throws ServletException
+     */
+    public static void writerErrorResult(HttpServletResponse response, Throwable e) throws IOException {
+        response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
+        PrintWriter writer = response.getWriter();
+        writer.print(JsonUtils.toJsonString(Result.throwable(e)));
+        writer.flush();
+    }
+}

+ 36 - 0
framework/server-starter/src/main/java/com/usoftchina/saas/server/error/UnCaughtErrorFilter.java

@@ -0,0 +1,36 @@
+package com.usoftchina.saas.server.error;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.filter.OncePerRequestFilter;
+import org.springframework.web.util.NestedServletException;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 处理过滤器里面的异常(无法通过ControllerAdvice处理的)
+ *
+ * @author yingp
+ * @date 2018/10/16
+ */
+public class UnCaughtErrorFilter extends OncePerRequestFilter {
+
+    private Logger logger = LoggerFactory.getLogger(UnCaughtErrorFilter.class);
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
+        try {
+            chain.doFilter(request, response);
+        } catch (Throwable ex) {
+            Throwable cause = ex;
+            if (ex instanceof NestedServletException) {
+                cause = ((NestedServletException) ex).getRootCause();
+            }
+            logger.error(ServletErrorUtils.buildMessage(request, cause), cause);
+            ServletErrorUtils.writerErrorResult(response, cause);
+        }
+    }
+}

+ 1 - 1
pom.xml

@@ -31,7 +31,7 @@
         <mybatis.spring.boot.version>1.3.1</mybatis.spring.boot.version>
         <fastjson.version>1.2.44</fastjson.version>
         <alibaba.druid.version>1.1.6</alibaba.druid.version>
-        <zipkin.version>2.11.5</zipkin.version>
+        <zipkin.version>2.11.1</zipkin.version>
         <pagehelper.starter.version>1.2.7</pagehelper.starter.version>
         <shiro.version>1.4.0</shiro.version>
         <swagger.version>2.7.0</swagger.version>