我有一个部署到外部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文件,表明如果没有设置管理端口,它将与服务器端口相同。
答案 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。