部署到外部Tomcat容器时的Spring Boot Actuator端口

时间:2015-04-21 14:50:02

标签: tomcat spring-boot

我有一个部署到外部Tomcat容器的Spring Boot应用程序(不使用嵌入式容器),我正在尝试设置执行器。问题是management.port中的application.properties似乎没有被Tomcat尊重。当我使用嵌入式Tomcat运行Spring Boot时,它运行正常。

例如,在application.properties中设置以下内容:

management.port=9010

嵌入式容器的工作端点

  • http://localhost:9010/health
在端口8080上运行

外部容器的非工作端点

  • http://localhost:9010/health
  • http://localhost:8080/health
  • http://localhost:9010/<appName>/health
  • http://localhost:8080/<appName>/health

我是否需要在Tomcat容器中使用特殊配置来公开Spring Boot执行器端点?

我尝试过设置MANAGEMENT_PORT的环境变量。大多数(几乎所有)可用的文档都使用嵌入式Tomcat,因此追踪此问题已证明具有挑战性。

关于这个答案的第三条评论提供了一些可能的见解:https://stackoverflow.com/a/28689853/2601060,它指向一个GitHub文件,表明如果没有设置管理端口,它将与服务器端口相同。

4 个答案:

答案 0 :(得分:4)

我们无法使用外部Tomcat容器指定其他端口。 原因如下:https://github.com/spring-projects/spring-boot/issues/552

唯一的方法是使用上下文路径扩展端点,比如“/ management”并在其上应用安全性。

答案 1 :(得分:0)

是的,如果您的application.properties正在调用属性 “management.port:9001”和“server.port:9000”。然后,您的应用端点将部署在端口9000上,执行器端点将部署在端口9001上。

所以它取决于我们。我们可以提到具有相同端口的两个属性,应用程序将正常工作。

答案 2 :(得分:0)

你在哪个Java版本下运行Tomcat7?

<强> N.B。这是所有猜测 - 我还没有能够验证这个

如果它是Java6(而我猜测是因为我遇到了类似的问题),我怀疑它与以下消息有关:<\ n / p>

  

INFO:JSR 356 WebSocket(Java WebSocket 1.1)支持不可用   在Java 6上运行时。要禁止此消息,请在Java上运行Tomcat   7,从$ CATALINA_HOME / lib中删除WebSocket JAR或添加   WebSocket JAR到tomcat.util.scan.DefaultJarScanner.jarsToSkip   $ CATALINA_BASE / conf / catalina.properties中的属性。请注意   不推荐使用Tomcat 7 WebSocket API。

我只能冒险猜测,Spring Boot使用JSR356告诉Web App Container除了收听主应用程序的默认端口之外,还要监听执行器端点的端口X&#34; ...并且Java6下无法运行...我可能错了。

如果有人可以确认/否认此行为,我会更新此回复。

在设置Tomcat以使用Java8并删除套接字jar(tomcat7-websocket.jar&amp; websocket-api.jar jars)之后,我得到了following message from Spring

  

o.s.b.a.a.EndpointWebMvcAutoConfiguration:无法在不同端口上启动嵌入式管理容器(管理端点仍可通过JMX获得)

与此同时,@ DecipherX的解决方法(即不设置management.port=9010)将通过默认端口暴露您的执行器端点。

答案 3 :(得分:0)

如果您从配置中删除 management.server.port,则执行器将部署在外部 Tomcat 中的 servlet 上下文路径下。

http://<--domain-->/<--servlet-context-->/actuator/health

<块引用>

除非已将管理端口配置为使用不同的 HTTP 端口公开端点,否则 management.endpoints.web.base-path 是相对于 server.servlet.context-path(Servlet Web 应用程序)或 spring.webflux.base -path(反应式 Web 应用程序)。如果配置了 management.server.port,则 management.endpoints.web.base-path 相对于 management.server.base-path。