ran*_*ing 4 java spring spring-boot spring-boot-actuator
我有一个带有以下启动代码的 Spring 启动应用程序。Actuator 端点被映射,bean 被移除。我看到执行器端点已注册,然后 bean 被移除。通过SO 线程,这些消息是无害的。但是当我尝试到达任何执行器终点时,我收到错误消息。我不确定我应该进一步研究什么才能使执行器工作。我附上了我提到的所有日志片段。
我用 maven 设置了项目:
Maven Spring Actuator 部分
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Java启动代码
@EnableAutoConfiguration(exclude = { MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class, MessageSourceAutoConfiguration.class })
@EnableConfigurationProperties({ MyAppProperties.class })
@SpringBootApplication
public class MyApp{
private static final Logger LOG = LoggerFactory.getLogger(MyApp.class);
public static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(MyApp.class);
Environment env = app.run(args).getEnvironment();
LOG.info("\n----------------------------------------------------------\n\t" +
"Application '{}' is running! Access URLs:\n\t" +
"Local: \t\thttp://localhost:{}\n\t" +
"External: \thttp://{}:{}\n----------------------------------------------------------",
env.getProperty("spring.application.name"),
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port"));
}
}
Run Code Online (Sandbox Code Playgroud)
执行器根据 DEBUG 模式下的日志启动端点:
2017-03-17 11:19:29.378 INFO 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-03-17 11:19:29.379 DEBUG 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : 1 request handler methods found on class org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint: {public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException={[],methods=[GET],produces=[application/octet-stream]}}
2017-03-17 11:19:29.379 INFO 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException
2017-03-17 11:19:29.380 DEBUG 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : 1 request handler methods found on class org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter: {public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()={[],methods=[GET],produces=[application/json]}}
2017-03-17 11:19:29.380 INFO 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-03-17 11:19:29.384 DEBUG 17855 --- [ 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]}}
2017-03-17 11:19:29.384 INFO 17855 --- [ 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)
2017-03-17 11:19:29.384 INFO 17855 --- [ 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()
2017-03-17 11:19:29.384 DEBUG 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : 1 request handler methods found on class org.springframework.cloud.context.restart.RestartMvcEndpoint: {public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke()={[],methods=[POST]}}
2017-03-17 11:19:29.384 INFO 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke()
2017-03-17 11:19:29.386 INFO 17855 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-03-17 11:19:29.386 DEBUG 17855 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Finished creating instance of bean 'endpointHandlerMapping'
2017-03-17 11:19:29.386 DEBUG 17855 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : Autowiring by type from bean name 'org.springframework.boot.actuate.autoconfigure.EndpointWebMvcChildContextConfiguration$EndpointHandlerMappingConfiguration' to bean named 'mvcEndpoints'
Run Code Online (Sandbox Code Playgroud)
最终我在日志中看到 bean 被删除了:
2017-03-17 11:19:29.415 DEBUG 17855 --- [ main] o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'endpointHandlerMapping': no URL paths identified
2017-03-17 11:19:29.415 DEBUG 17855 --- [ main] o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'mvcEndpoints': no URL paths identified
2017-03-17 11:19:29.415 DEBUG 17855 --- [ main] o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'environmentMvcEndpoint': no URL paths identified
2017-03-17 11:19:29.415 DEBUG 17855 --- [ main] o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'heapdumpMvcEndpoint': no URL paths identified
2017-03-17 11:19:29.415 DEBUG 17855 --- [ main] o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'healthMvcEndpoint': no URL paths identified
2017-03-17 11:19:29.415 DEBUG 17855 --- [ main] o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'metricsMvcEndpoint': no URL paths identified
Run Code Online (Sandbox Code Playgroud)
当我请求/info或/health访问info和health 时,我被定向到白标错误页面,因为没有找到处理程序。
调试调度程序 servlet 后,我看到有 7 个处理程序,我希望找到/infoin的映射BeanNameUrlHandlerMapping。
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WelcomePageHandlerMapping
Run Code Online (Sandbox Code Playgroud)
由于列表中的第一个映射是SimpleUrlHandlerMapping,它立即返回“无处理程序映射”,这将我带到错误页面。我尝试检查订单是否重要并BeanNameUrlHandlerMapping查看它是否返回处理程序映射并且没有返回任何。所以我怀疑之前删除 bean 的调试消息是导致问题的罪魁祸首。
有人可以建议我是否需要特别研究什么。
根据入门指南:使用 Spring Boot Actuator 构建 RESTful Web 服务,您应该使用spring-boot-starter-actuator启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
而不是spring-boot-actuator依赖。
另请注意,根据Spring Boot 参考:
HealthIndicators 返回的信息本质上通常有些敏感。例如,您可能不想向全世界发布您的数据库服务器的详细信息。因此,默认情况下,未经身份验证的 HTTP 连接仅公开健康状态。如果您希望始终公开完整的健康信息,您可以设置
endpoints.health.sensitive为false。
| 归档时间: |
|
| 查看次数: |
5040 次 |
| 最近记录: |