在多个端口上提供Spring Boot Actuator端点

时间:2016-04-12 13:53:58

标签: spring-boot spring-boot-actuator

我们的主要应用程序在端口8443上提供,我们使用management.port在端口8444上为我们的执行器端点提供服务。

有没有办法让单个端点(健康端点)在8443和8444上同时服务,而只剩下端点8444上的剩余端点?

1 个答案:

答案 0 :(得分:2)

您可以使用内置的Tomcat容器:

  1. 删除管理端口配置属性
  2. 添加其他连接器以服务端口8444
  3. 添加过滤器以仅允许在该端口上访问运行​​状况检查
  4. 您的代码可能看起来像这样。

    @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;
        }
    }