diff --git a/nxhs-service/pom.xml b/nxhs-service/pom.xml index 5642d0c..fe97c61 100644 --- a/nxhs-service/pom.xml +++ b/nxhs-service/pom.xml @@ -43,6 +43,11 @@ org.springframework.boot spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-actuator + diff --git a/nxhs-service/src/main/java/cc/yunxi/NxhsApplication.java b/nxhs-service/src/main/java/cc/yunxi/NxhsApplication.java index 1c6102a..aa7a8ee 100644 --- a/nxhs-service/src/main/java/cc/yunxi/NxhsApplication.java +++ b/nxhs-service/src/main/java/cc/yunxi/NxhsApplication.java @@ -5,10 +5,18 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; +import javax.annotation.PreDestroy; + @SpringBootApplication @ServletComponentScan(basePackages = "cc.yunxi.filter") public class NxhsApplication { public static void main(String[] args) { SpringApplication.run(NxhsApplication.class, args); } + + + @PreDestroy + public void PreDestroy(){ + System.out.println("应用程序正在关闭..."); + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java b/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java index 429199c..aaefa3c 100644 --- a/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java +++ b/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java @@ -7,15 +7,28 @@ import cc.yunxi.interceptor.StatsInterceptor; import cn.hutool.core.collection.CollUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties; +import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType; +import org.springframework.boot.actuate.endpoint.ExposableEndpoint; +import org.springframework.boot.actuate.endpoint.web.*; +import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier; +import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier; +import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.format.FormatterRegistry; import org.springframework.util.AntPathMatcher; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.config.annotation.*; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; @Configuration @@ -156,4 +169,52 @@ public class WebMvcConfig implements WebMvcConfigurer { .addPathPatterns("/**") .excludePathPatterns(globalExcludePaths); } + + + + /** + * 解决springboot升级到2.6.x之后,knife4j报错 + * + * @param webEndpointsSupplier the web endpoints supplier + * @param servletEndpointsSupplier the servlet endpoints supplier + * @param controllerEndpointsSupplier the controller endpoints supplier + * @param endpointMediaTypes the endpoint media types + * @param corsProperties the cors properties + * @param webEndpointProperties the web endpoint properties + * @param environment the environment + * @return the web mvc endpoint handler mapping + */ + @Bean + public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping( + WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, + ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, + CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, + Environment environment) { + List> allEndpoints = new ArrayList<>(); + Collection webEndpoints = webEndpointsSupplier.getEndpoints(); + allEndpoints.addAll(webEndpoints); + allEndpoints.addAll(servletEndpointsSupplier.getEndpoints()); + allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints()); + String basePath = webEndpointProperties.getBasePath(); + EndpointMapping endpointMapping = new EndpointMapping(basePath); + boolean shouldRegisterLinksMapping = shouldRegisterLinksMapping(webEndpointProperties, + environment, basePath); + return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, + corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), + shouldRegisterLinksMapping, null); + } + + /** + * shouldRegisterLinksMapping + * @param webEndpointProperties webEndpointProperties + * @param environment environment + * @param basePath / + * @return boolean + */ + private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, + Environment environment, String basePath) { + return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) + || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT)); + } + }