Spring Jersey2 的启动指标

Spring boot metrics with Jersey2

我有一个应用程序 运行 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>

在引入执行器依赖性之前,Jersey 曾经运行良好。 然后创建了以下 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 资源和指标都可用。 我在这里缺少什么让指标和 Jersey 资源开始在同一个端口上工作?

"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>");
    }
}

另一方面,仅供参考,问题的原因是用于 Jersey 的默认 /* url-映射。如果你可以改变它,这样做就可以解决问题。例如/api。您可以使用 spring.jersey.applicationPath=/apiResourceConfig 子类上的 @ApplicationPath("/api") 在属性中进行配置。

而最后一边,还有一个属性

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

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