簡體   English   中英

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

[英]Spring Boot Actuator port when deployed to external Tomcat container

我有一個部署到外部 Tomcat 容器(不使用嵌入式容器)的 Spring Boot 應用程序,我正在嘗試設置執行器。 問題是application.properties中的management.port似乎不受 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 文件,表明如果未設置管理端口,它將與服務器端口相同.

我們不能為外部 Tomcat 容器指定額外的端口。 這就是原因: https : //github.com/spring-projects/spring-boot/issues/552

唯一的方法是使用上下文路徑擴展端點,比如“/management”並對其應用安全性。

是的,如果您的 application.properties 具有名為“management.port: 9001”和“server.port: 9000”的屬性。 然后您的應用程序端點將部署在端口 9000 上,執行器端點將部署在端口 9001 上。

所以這取決於我們。 我們可以使用相同的端口提及這兩個屬性,應用程序將正常工作。

您在什么 Java 版本下運行 Tomcat7?

注意這都是猜測 - 我還沒有能夠驗證這一點

如果是Java6 (我猜是因為我遇到了類似的問題),我懷疑它與以下消息有關:

信息:在 Java 6 上運行時,JSR 356 WebSocket (Java WebSocket 1.1) 支持不可用。要抑制此消息,請在 Java 7 上運行 Tomcat,從 $CATALINA_HOME/lib 中刪除 WebSocket JAR 或將 WebSocket JAR 添加到 tomcat.util $CATALINA_BASE/conf/catalina.properties 中的 .scan.DefaultJarScanner.jarsToSkip 屬性。 請注意,已棄用的 Tomcat 7 WebSocket API 將可用。

我只能猜測,Spring Boot 使用的JSR356告訴 Web App 容器“除了偵聽主應用程序的默認端口外,還偵聽執行器端點的端口X ”……這不是可在Java6下運行...我可能錯了。

如果有人可以確認/否認這種行為,我會更新此回復。

將 Tomcat 設置為使用Java8並刪除套接字 jar( tomcat7-websocket.jarwebsocket-api.jar jar)后,我從 Spring收到以下消息

osbaaEndpointWebMvcAutoConfiguration :無法在不同端口上啟動嵌入式管理容器(管理端點仍可通過 JMX 使用)

同時,@DecipherX 的解決方法(即不設置management.port=9010 )將通過默認端口公開您的執行器端點。

如果您從配置中刪除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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM