Jersey2的Spring启动指标

时间:2016-03-07 16:07:26

标签: spring spring-boot jersey metrics

我有一个运行spring-boot,jersey2和spring指标的应用程序: 下面是maven片段:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

泽西岛曾经很好地工作,直到引入执行器依赖。 然后创建了以下bean来使Jersey作为过滤器使用:

@Bean
public FilterRegistrationBean jerseyFilterRegistration() {
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setName("jerseyFilter");
    bean.setFilter(new ServletContainer(resourceConfig()));
    bean.setOrder(Ordered.LOWEST_PRECEDENCE);
    bean.addInitParameter("com.sun.jersey.config.property.WebPageContentRegex", managementContextRegex);

    return bean;
}

指标映射到/ admin路径。使用此配置,我无法使指标工作。但是,通过添加management.port(与主应用程序端口不同),可以使用Jersey资源和指标。 我在这里缺少什么使指标和泽西资源开始在同一个端口上工作?

1 个答案:

答案 0 :(得分:1)

"com.sun.jersey.config.property.WebPageContentRegex"

这是错误的财产。那是泽西岛1.x.的。对于2.x,它应该是

"jersey.config.servlet.filter.staticContentRegex"

请参阅ServletProperties.FILTER_STATIC_CONTENT_REGEX

另外,您可以通过简单地设置几个配置属性来避免定义自己的FilterRegistrationBean。在application.properties中,您可以使用以下

spring.jersey.type=filter
spring.jersey.init.jersey.config.servlet.filter.staticContentRegex=<your-regex>

或者您可以在ResourceConfig子类

中配置正则表达式
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        property(ServletProperties.FILTER_STATIC_CONTENT_REGEX, "<your-regex>");
    }
}

另一方面,仅仅是一个FYI,问题的原因是用于Jersey的默认/* url-mapping。如果您可以更改它,那么这样做可以解决问题。例如/api。您可以在spring.jersey.applicationPath=/api子类的@ApplicationPath("/api")ResourceConfig属性中配置该属性。

最后一点,还有一个属性

ServletProperties.FILTER_FORWARD_ON_404
"jersey.config.servlet.filter.forwardOn404"

我不确定staticContenRegex属性是如何工作的,我从来没有真正挖掘过源代码。所以我不知道它是否只是一些文件IO来获取静态文件或它转发请求,但如果它有一些文件IO,那么我不认为该属性适用于您的用例,因为端点不是文件。在这种情况下,forwardOn404应该可以工作。