我们的主要应用程序在端口8443上提供,我们使用management.port
在端口8444上为我们的执行器端点提供服务。
有没有办法让单个端点(健康端点)在8443和8444上同时服务,而只剩下端点8444上的剩余端点?
答案 0 :(得分:2)
您可以使用内置的Tomcat容器:
您的代码可能看起来像这样。
@ComponentScan
@Configuration
@EnableAutoConfiguration
public class Application extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter implements EmbeddedServletContainerCustomizer {
@Autowired
private PortInterceptor portInterceptor;
public static void main(String[] args) throws Exception {
SpringApplication application = new SpringApplication(Application.class);
application.run(args);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(portInterceptor);
}
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory)container;
Connector connector = new Connector();
connector.setPort(8444);
tomcat.addAdditionalTomcatConnectors(connector);
}
}
@Component
public class PortInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(request.getLocalPort() == 8444){
return isHealthCheckRequest(request);
}
return true;
}
}