首页 文章

Spring Boot Jersey和Monitoring URL

提问于
浏览
1

我们有一个简单的Spring Boot应用程序 .

Spring Boot提供默认监控 endpoints

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#production-ready-monitoring

例:

@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        // registering resources from rest package
        packages("com.xyx.abc.rest");

    }

}

Spring Boot提供的REST endpoints 在Spring Boot Jersey应用程序的上下文中不可用 .

Spring Boot依赖包括Jersey,starter-actuator,starter-tomcat .

我们的REST资源显示得很好,但Spring Boot提供的用于监控的资源不会显示出来 .

例如,http://abc.xyx.com:8080/health返回404

1 回答

  • 1

    如果您将其用作 Filter ,则需要告诉Jersey不要处理这些请求 . 例如 . 将Jersey资源放在一个单独的路径下,如"/api/*"或其他:

    @Bean
    public FilterRegistrationBean jersey() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        ...
        bean.setUrlPatterns(Lists.newArrayList("/api/*"));
        return bean;
    }
    

    (来自here) .

    或者通过声明您的管理 endpoints 是“静态”(通过另一个init参数“com.sun.jersey.config.property.WebPageContentRegex”):

    @Bean
    public FilterRegistrationBean jersey() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        ...
        bean.addInitParameter("com.sun.jersey.config.property.WebPageContentRegex",
                "/admin/.*");
        return bean;
    }
    

    我们在Spring Boot外部配置中设置了 management.contextPath=/admin (否则你必须枚举正则表达式中的所有 endpoints ) .

    您还可以告诉Jersey忽略未解决的请求(而不是发送404) . 这也可以实现您的目标,但可能会影响您的客户端应用程序(如果他们的行为依赖于404) .

相关问题