Spring boot 在多个端口上为Spring引导执行器端点提供服务

Spring boot 在多个端口上为Spring引导执行器端点提供服务,spring-boot,spring-boot-actuator,Spring Boot,Spring Boot Actuator,我们的主要应用程序在端口8443上提供服务,我们正在使用management.port为端口8444上的执行器端点提供服务 有没有一种方法可以让一个端点(健康端点)同时服务于8443和8444,而将其余端点仅保留在端口8444上?如果您使用内置的Tomcat容器,您可以: 删除管理端口配置属性 为端口8444添加一个附加接头 添加筛选器以仅允许在该端口上访问运行状况检查 您的代码可能看起来像这样 @ComponentScan @配置 @启用自动配置 公共类应用程序扩展WebMvcAutoConf

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


有没有一种方法可以让一个端点(健康端点)同时服务于8443和8444,而将其余端点仅保留在端口8444上?

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

  • 删除管理端口配置属性
  • 为端口8444添加一个附加接头
  • 添加筛选器以仅允许在该端口上访问运行状况检查
  • 您的代码可能看起来像这样

    @ComponentScan
    @配置
    @启用自动配置
    公共类应用程序扩展WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter实现EmbeddedServletContainerCustomizer{
    @自动连线
    专用端口接收器端口接收器;
    公共静态void main(字符串[]args)引发异常{
    SpringApplication=新的SpringApplication(application.class);
    application.run(args);
    }
    @凌驾
    公共无效附加接收器(侦听器注册表){
    注册表。附加接收器(端口接收器);
    }
    @凌驾
    public void自定义(ConfigurableMbeddedServletContainer){
    TomcatEmbeddedServletContainerFactory tomcat=(TomcatEmbeddedServletContainerFactory)容器;
    连接器=新连接器();
    连接器。设置端口(8444);
    添加额外的tomcat连接器(连接器);
    }
    }
    @组成部分
    公共类PortInterceptor扩展HandlerInterceptor适配器{
    @凌驾
    公共布尔预处理(HttpServletRequest请求、HttpServletResponse响应、对象处理程序)引发异常{
    if(request.getLocalPort()==8444){
    返回isHealthCheckRequest(请求);
    }
    返回true;
    }
    }
    
    通常,人们会将Apache HTTPD(带mod_代理)或ngnix放在Spring Boot应用程序的前面。那些软件真的很擅长这类事情。我用
    import org.springframework.web.servlet.config.annotation.WebMVCCConfigureAdapter
    而不是
    WebMvcAutoConfiguration.WebMvcAutoConfiguration Adapter
    做了一个小评论,这让我实现了一个额外的具有许多参数的构造函数。