我有一个运行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资源和指标。 我在这里缺少什么使指标和泽西资源开始在同一个端口上工作?
答案 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应该可以工作。