【发布时间】:2016-10-04 01:14:42
【问题描述】:
我的 Spring Boot 应用程序有问题,它应该从命令行运行,同时从标准 /metrics 端点提供一些指标。当我刚刚创建应用程序时,所有指标都正确提供,但在某些时候我似乎“破坏”了某些东西,我的应用程序停止从默认端点提供服务。我不能只是恢复到初始状态,因为已经有很多代码而且我不想丢失版本控制历史。也许有人可以指出我做错了什么?
我不覆盖调度程序 servlet,也不添加任何自定义过滤器。
Spring Boot 1.3.7 版。
访问 /metrics 或任何其他默认端点时出错:
白标错误页面
这个应用程序没有明确的 /error 映射,所以你看到 这是一个后备。
2016 年 10 月 3 日星期一 17:53:12 PDT 出现意外错误(type=Not 找到,状态=404)。没有可用的消息
申请文件:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Runner.class, args);
}
}
主运行器文件:
@EnableConfigurationProperties(ApplicationProperties.class)
@SpringBootApplication
public class Runner implements CommandLineRunner {
@Override
public void run(String... strings) throws Exception {
// shortened ...
}
}
POM 文件片段:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
调试输出显示过滤器已创建:
2016-10-03 17:26:14.461 DEBUG 85880 --- [ost-startStop-1] o.s.b.c.e.ServletContextInitializerBeans : Added existing Servlet initializer bean 'dispatcherServletRegistration'; order=2147483647, resource=class path resource [org/springframework/boot/autoconfigure/web/DispatcherServletAutoConfiguration$DispatcherServletConfiguration.class]
2016-10-03 17:26:14.720 DEBUG 85880 --- [ost-startStop-1] o.s.b.c.e.ServletContextInitializerBeans : Created Filter initializer for bean 'metricFilter'; order=-2147483648, resource=class path resource [org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.class]
我创建了一个示例清洁应用程序进行比较,输出中有我的应用程序中没有的行:
2016-10-03 18:06:48.075 DEBUG 86858 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : 2 request handler methods found on class org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint: {public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)={[/{name:.*}],methods=[GET],produces=[application/json]}, public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()={[],methods=[GET],produces=[application/json]}}
2016-10-03 18:06:48.076 INFO 86858 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)
2016-10-03 18:06:48.076 INFO 86858 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
因此,过滤器/servlet 似乎已创建但未映射到我的应用程序中。 我可能在这里错过了什么?
【问题讨论】:
-
A 404 is resource is not found - 那么有哪些网络资源可用以及您要获取哪些资源。配置在
ApplicationProperties.class,那么显示这段代码怎么样? -
@ScaryWombat ApplicationProperties.class 是一个简单的 POJO,用于从应用程序启动参数中获取一些文本属性。它不会以任何方式影响 Web 配置。我正在尝试访问 /metrics 端点,如问题中所述,那是我得到 404 的时候。你为什么要减去这个问题?
-
minusing- 哇,我学会了一个新词。其实我是想帮你。我正在尝试确定您实际映射到metrics的代码,但我看不到任何代码。 -
顺便说一句,如果您使用的是 Eclipse 和/或 SVN,那么也许您可以在以前的版本中使用
compare。 -
@ScaryWombat 好的,好吧,如果这能让它变得更好,那就投反对票。我刚刚从“减号”创建了一个动词。我使用 git 和 Intellij Idea,当然如果容易的话,我可以逐步进行比较和部分还原和还原。但这不仅仅是一个版本。端点已经有一个多星期没有使用了,在那段时间里,已经进行了大量的提交。我可以尝试创建一个新应用并将所有代码移至其中,但我会丢失几乎所有历史记录。
标签: java spring spring-boot