0

背景资料

我有一个使用 Actuator 作为生产实用程序的 Spring Boot Web 应用程序。

该应用程序运行良好,管理端口运行良好。我可以浏览统计信息、检查健康状况等。我还启用了远程关闭端点,它正确显示在 localhost:{mgmt_port}/actuator 端点列表中。

我的问题

但是,当我转到 localhost:{mgmt_port}/shutdown 时,我看到:

<Map>
    <timestamp>1453905900007</timestamp>
    <status>500</status>
    <error>Internal Server Error</error>
    <exception>org.springframework.web.HttpRequestMethodNotSupportedException</exception>
    <message>Request method 'GET' not supported</message>
    <path>/shutdown</path>
</Map>

有用的信息

  • 点击关闭链接后,整个应用程序似乎仍在运行。我仍然可以从我的自定义应用程序端点中提取数据。

  • Spring 执行器提供的管理 URL 在关闭后似乎仍然运行良好。

发布前的控制台输出

10:01:42.496 [main] INFO osbcetTomcatEmbeddedServletContainer - Tomcat 在端口上启动:8002 (http) 10:01:42.499 [main] INFO com.xyz.api.Main - 在 5.956 秒内启动 Main(JVM 运行 6.381 )

发出后的控制台输出

10:03:29.090 [http-nio-8003-exec-1] INFO oaccC[Tomcat-1].[localhost].[/] - 初始化 Spring FrameworkServlet 'dispatcherServlet' 10:03:29.090 [http-nio-8003- exec-1] INFO osweb.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet':初始化开始于 10:03:29.126 [http-nio-8003-exec-1] INFO osweb.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet':初始化在 36 完成ms 10:03:29.151 [http-nio-8003-exec-1] 错误 oaccC[.[.[.[dispatcherServlet] - Servlet.service() 用于路径 [] 上下文中的 servlet [dispatcherServlet] 引发异常 [请求方法'GET' not supported] 根本原因 org.springframework.web.HttpRequestMethodNotSupportedException:org.springframework.web.servlet 不支持请求方法 'GET'。mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:204) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod (AbstractHandlerMethodMapping.java:382) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:322) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:60) ~[spring-webmvc-4.2 .4.RELEASE.jar!/:4.2.4.RELEASE] 在 org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:351) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] 在 org.springframework.boot.actuate.autoconfigure.EndpointWebMvcChildContextConfiguration$CompositeHandlerMapping.getHandler(EndpointWebMvcChildContextConfiguration.java:212) ~[spring -boot-actuator-1.3.2.RELEASE.jar!/:1.3.2.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1120) ~[spring-webmvc-4.2.4. RELEASE.jar!/:4.2.4.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:932) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4 .RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] at org.springframework.web .servlet.FrameworkServlet。processRequest(FrameworkServlet.java:969) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860) ~ [spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.0.30. jar!/:8.0.30] 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) ~[spring-webmvc-4.2.4.RELEASE.jar!/:4.2.4.RELEASE] 在javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.0.30.jar!/:8.0.30] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain .java:291) ~[tomcat-embed-core-8.0.30.jar!/:8.0.30] 在 org.apache.catalina.core.ApplicationFilterChain。doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.30.jar!/:8.0.30] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) ~[tomcat -embed-core-8.0.30.jar!/:8.0.30] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.30.jar!/ :8.0.30] 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-8.0.30.jar!/:8.0.30] 在 org.apache.catalina。 core.StandardHostValve.invoke(StandardHostValve.java:141) [tomcat-embed-core-8.0.30.jar!/:8.0.30] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.30.jar!/:8.0.30] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.30.jar!/:8.0.30] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) [tomcat-embed-core-8.0 .30.jar!/:8.0.30] 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) [tomcat-embed-core-8.0.30.jar!/:8.0.30] 在org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) [tomcat-embed-core-8.0.30.jar!/:8.0.30] 在 org.apache.tomcat.util.net.NioEndpoint$ SocketProcessor.doRun(NioEndpoint.java:1500) [tomcat-embed-core-8.0.30.jar!/:8.0.30] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java: 1456)[tomcat-embed-core-8.0.30.jar!/:8.0.30] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)[na:1.8.0_51] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_51] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat -embed-core-8.0.30.jar!/:8.0.30] 在 java.lang.Thread.run(未知来源)[na:1.8.0_51]

4

1 回答 1

3

回答我自己的问题以帮助将来的其他人。我是个笨蛋... /actuatorURL 列出了所有可用的命令,所有命令都根据GET请求工作。

/shutdownURL 实际上需要一个HTTP POST发送给它才能激活它。我在文档中的任何地方都没有看到这一点。

示例 CURL 命令:

> curl -X POST http://hostname:8003/shutdown

关机命令输出:

<SingletonMap><message>Shutting down, bye...</message></SingletonMap>
于 2016-01-27T15:23:15.993 回答