透過 JMX 監控與管理

Java Management Extensions (JMX) 提供了一種標準機制來監控和管理應用程式。 預設情況下,此功能未啟用。 您可以將 spring.jmx.enabled 組態屬性設定為 true 來開啟它。 Spring Boot 將最合適的 MBeanServer 作為 ID 為 mbeanServer 的 bean 公開。 任何使用 Spring JMX 註解 (@ManagedResource@ManagedAttribute@ManagedOperation) 註解的 bean 都會對其公開。

如果您的平台提供了標準的 MBeanServer,Spring Boot 將使用該伺服器,並在必要時預設為 VM MBeanServer。 如果所有這些都失敗,則會建立新的 MBeanServer

spring.jmx.enabled 僅影響 Spring 提供的管理 bean。 啟用其他程式庫 (例如 Log4j2Quartz) 提供的管理 bean 是獨立的。

有關更多詳細資訊,請參閱 JmxAutoConfiguration 類別。

預設情況下,Spring Boot 也會將管理端點作為 JMX MBean 在 org.springframework.boot 網域下公開。 若要完全控制 JMX 網域中端點的註冊,請考慮註冊您自己的 EndpointObjectNameFactory 實作。

自訂 MBean 名稱

MBean 的名稱通常從端點的 id 產生。 例如,health 端點會以 org.springframework.boot:type=Endpoint,name=Health 公開。

如果您的應用程式包含多個 Spring ApplicationContext,您可能會發現名稱衝突。 為了解決此問題,您可以將 spring.jmx.unique-names 屬性設定為 true,以便 MBean 名稱始終是唯一的。

您也可以自訂公開端點的 JMX 網域。 以下設定顯示如何在 application.properties 中執行此操作的範例

  • 屬性

  • YAML

spring.jmx.unique-names=true
management.endpoints.jmx.domain=com.example.myapp
spring:
  jmx:
    unique-names: true
management:
  endpoints:
    jmx:
      domain: "com.example.myapp"

停用 JMX 端點

如果您不想透過 JMX 公開端點,您可以將 management.endpoints.jmx.exposure.exclude 屬性設定為 *,如下列範例所示

  • 屬性

  • YAML

management.endpoints.jmx.exposure.exclude=*
management:
  endpoints:
    jmx:
      exposure:
        exclude: "*"