当前位置: 首页 > 知识库问答 >
问题:

为什么Spring引导执行器中除了信息和健康之外,其他endpoint不暴露

洪德寿
2023-03-14
    @Configuration
    @EnableWebMvc
    @Import({
    ConfigurationPropertiesReportEndpointAutoConfiguration.class,
    EndpointAutoConfiguration.class,
    WebEndpointAutoConfiguration.class,
    HealthEndpointAutoConfiguration.class,
    HealthIndicatorAutoConfiguration.class,
    InfoEndpointAutoConfiguration.class,
    InfoContributorAutoConfiguration.class,
    LogFileWebEndpointAutoConfiguration.class,
    LoggersEndpointAutoConfiguration.class,
    BeansEndpointAutoConfiguration.class,
    EnvironmentEndpointAutoConfiguration.class,
    CachesEndpointAutoConfiguration.class,
    AuditEventsEndpointAutoConfiguration.class,
    MetricsAutoConfiguration.class,
    MetricsEndpointAutoConfiguration.class,
    WebMvcMetricsAutoConfiguration.class,
    ManagementWebSecurityAutoConfiguration.class,
    ManagementContextAutoConfiguration.class,
    ServletManagementContextAutoConfiguration.class,
    })
    @EnableConfigurationProperties(CorsEndpointProperties.class)
    public class ActuatorConfiguration2 {
    
    @Bean //taken from WebMvcEndpointManagementContextConfiguration.class
    public WebMvcEndpointHandlerMapping endpointHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
       ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier 
            controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties 
        corsProperties, WebEndpointProperties webEndpointProperties,Environment environment) {
        List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
        Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
        allEndpoints.addAll(webEndpoints);
        allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
        allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
        //EndpointMapping endpointMapping = new EndpointMapping(webEndpointProperties.getBasePath());
        
        String basePath = webEndpointProperties.getBasePath(); 
        EndpointMapping endpointMapping = new EndpointMapping(basePath); 
        boolean shouldRegisterLinksMapping = StringUtils.hasText(basePath) || 
        ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT);
     
        return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes,
                corsProperties.toCorsConfiguration(),
                new EndpointLinksResolver(allEndpoints, webEndpointProperties.getBasePath()), 
        shouldRegisterLinksMapping);
    }

    @Bean
    public DispatcherServletPath dispatcherServletPath(){
        
            return () -> "/";
        }
   }
http://localhost:8090/com.springmvc.actuator.demo3/actuator/

{"_links":{"self":{"href":"http://localhost:8090/com.springmvc.actuator.demo3/actuator","templated":false},"health":{"href":"http://localhost:8090/com.springmvc.actuator.demo3/actuator/health","templated":false},"health-path":{"href":"http://localhost:8090/com.springmvc.actuator.demo3/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8090/com.springmvc.actuator.demo3/actuator/info","templated":false}}}

我应该做什么来获取其他endpoint,比如:度量、bean、缓存等?

共有1个答案

郑翰海
2023-03-14

信息、health是Spring Boot执行器的默认endpoint。

公开endpoint

您似乎没有在application.properties上声明endpoint。如果是,请添加以下内容再试一次:

// Enable everything with wildcard
management.endpoints.web.exposure.include=*

// You can also disable some of them
management.endpoints.web.exposure.exclude=jolokia,liquibase
 类似资料:
  • {“Status”:“Down”} 我需要做什么才能显示自定义健康状况指示器?

  • 目标:保护除信息和健康之外的所有执行器endpoint,但健康endpoint显示用户身份验证时的详细信息。 谁有办法解决这个问题?

  • null 在我的文件中,我启用了web应用程序默认禁用的所有endpoint(按照https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints-exposing-endpoints)。 我希望能够访问所有的执行器endp

  • 但我想要一些我可以调用从AWS弹性负载均衡器/自动缩放组。默认情况下,如果一个实例未通过健康检查,ELB/ASG将终止它并用一个新的实例替换它。问题是一些健康检查,如DataSourceHealthIndicator,会在数据库关闭时向下报告,但我的应用程序实例在其他方面是完全健康的。如果我使用默认行为,AWS将抛出完全正常的实例,直到数据库重新启动,这将导致我的账单增加。 我可以去掉DataSo

  • 第一次尝试执行器依赖关系时,我将其配置为选入 当我在本地调用时,大约需要1.4秒来响应。请记住,这是一个本地调用,来自服务器的同一台机器。 如果我创建了一个以空响应进行响应的常规endpoint,则请求只需几毫秒。 这正常吗?我能让它回复快一点吗?

  • 在我们的Spring Boot应用程序中,我们使用对可以访问我们应用程序的用户进行身份验证。我们在身份验证功能上没有看到任何问题,但是当我们点击URL时,我们会得到LDAP的以下状态: 在跟踪此空指针异常时,我们在尝试访问时获得此跟踪: 最后,下面是我们的安全配置的样子: 现在我们确实在控制台中得到一条消息,说,但这是我们的预期,我们对此很满意。看来健康终点并不尊重这一点。我不知道这是我们的代码的