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=/api
或 ResourceConfig
子类上的 @ApplicationPath("/api")
在属性中进行配置。
而最后一边,还有一个属性
ServletProperties.FILTER_FORWARD_ON_404
"jersey.config.servlet.filter.forwardOn404"
我不太确定 staticContenRegex 属性 是如何工作的,我从未真正深入研究过源代码。所以我不知道它是否只是做一些文件 IO 来获取静态文件或它转发请求,但如果它做一些文件 IO,那么我认为 属性 不适用于您的用例,因为端点不是文件。在这种情况下,forwardOn404 应该可以工作。
我有一个应用程序 运行 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=/api
或 ResourceConfig
子类上的 @ApplicationPath("/api")
在属性中进行配置。
而最后一边,还有一个属性
ServletProperties.FILTER_FORWARD_ON_404
"jersey.config.servlet.filter.forwardOn404"
我不太确定 staticContenRegex 属性 是如何工作的,我从未真正深入研究过源代码。所以我不知道它是否只是做一些文件 IO 来获取静态文件或它转发请求,但如果它做一些文件 IO,那么我认为 属性 不适用于您的用例,因为端点不是文件。在这种情况下,forwardOn404 应该可以工作。