web-dev-qa-db-ja.com

SpringBootを使用してJMXを構成する方法

SpringBootを使用してSpringIntegrationアプリケーションを作成しました。 SpringBootでJMXを設定する方法を知りたいのですが。 Spring Boot Actuatorを使用する場合、デフォルトでJMXが構成されていると思います。

Spring Integration用にMBeanをエクスポートできるようにするには、他に何かを構成する必要がありますか?

私が見る例のほとんどは、applicationContext.xmlに次の行があります

<context:mbean-export/>
<context:mbean-server/>

私のApplication.Javaクラスは次のようになります。

package com.jbhunt.app.consumerappointmentintegration;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.ImportResource;

    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    @ImportResource("classpath:META-INF/spring/integration/spring-integration-context.xml")
    public class Application {

        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

この行を構成に追加しても、Spring Integrationmbeanがエクスポートされないようです。

@EnableIntegrationMBeanExport(server = "mbeanServer",  defaultDomain="my.company.domain")

私はこのビデオを参照しています https://www.youtube.com/watch?v=TetfR7ULnA8

8
zachariahyoung

ご存知のとおり、クラスパスにspring-integration-jmxがある場合、Spring IntegrationJMXはデフォルトで有効になっています。そしてもちろん、spring.jmx.enabled = true(デフォルト)の場合。

@EnableIntegrationMBeanExportに基づいており、(ConfigurationClassParserから)次の理由でインポートクラスをオーバーライドできないため、もう1つ@Importを宣言するだけでオーバーライドすることはできません。

imports.addAll(sourceClass.getAnnotationAttributes(Import.class.getName(), "value"));

インポートされたクラスがすでに存在する場合、それらはオーバーライドできません。

要件を達成するには、いくつかの選択肢があります。

  1. デフォルトのSpringBootJMXを無効にします-application.propertiesspring.jmx.enabled = falseに追加し、@EnableIntegrationMBeanExportを引き続き使用します

  2. IntegrationMBeanExporter@Beanを手動で構成します。

  3. my.company.domainドメインをapplication.propertiesで構成するだけです。

    spring.jmx.default_domain = my.company.domain
    
18
Artem Bilan

これを追加するのはかなり遅いです。しかし、endpoints.jmx.domainに加えて、spring.jmx.default-domainをアプリケーションごとに固有の何かに変更すると便利だと思いました。

これは、Tomcat7で実行されているSpringBoot1.4.1アプリの複数のインスタンスで発生します

4
scudsucker