Включение JMX в Spring Boot - PullRequest
0 голосов
/ 06 июля 2018

Вот мой build.gradle ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter-parent:2.0.1.RELEASE')

    compile('org.springframework.boot:spring-boot-starter-batch')
    compile("org.springframework.boot:spring-boot-starter-jdbc")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("com.h2database:h2")

    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.springframework.batch:spring-batch-test')
}

Как мне показалось, по умолчанию будет включен JMX. Я иду в JConsole, подключаюсь к приложению и ожидаю увидеть папку org.springframework.boot в java.util.logging, я ничего не вижу.

Итак, теперь я выбираю несколько своих пользовательских бобов и добавляю @ManagedResource, я знаю, вижу это.

Тем не менее, что если я захочу выставить пакетные бобы типа @JobOperator, как мне это сделать?

Pre Spring Boot, я мог бы что-то вроде:

<bean class="org.springframework.jmx.export.MBeanExporter">
  <property name="beans">
    <map>
      <entry key="spring:service=batch,bean=jobOperator">
          <bean class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="target" ref="jobOperator"/>
          <property name="interceptorNames" value="exceptionTranslator" />
        </bean>
      </entry>
    </map>
  </property>
  <property name="assembler">
<bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
      <property name="interfaceMappings">
        <map>
          <entry key="spring:service=batch,bean=jobOperator"
              value="org.springframework.batch.core.launch.JobOperator"/>
        </map>
      </property>
    </bean>
  </property>
</bean>

Когда я определяю свой JobOperator, в моем файле @Configuration в Spring Boot я делаю:

@Bean
public JobOperator jobOperator() throws Exception {
    SimpleJobOperator simpleJobOperator = new SimpleJobOperator();
    // the operator wraps the launcher
    simpleJobOperator.setJobLauncher(this.jobLauncher);
    ...
}

Я не могу добавить @ManagedResource под аннотацией @Bean. Итак, как мне представить JobOperator как компонент JMX?

1 Ответ

0 голосов
/ 20 ноября 2018

Вот как я это сделал в своем коде -

@Bean
public MBeanExporter exporter(){
    MBeanExporter m = new MBeanExporter();
    Map<String,Object> map = new HashMap<String, Object>();
    JmxBean testBean = (JmxBean)ctx.getBean("testBean");
    map.put("testBean",testBean);
    m.setBeans(map);
    return m;
}

@Bean
public JmxBean testBean(){
    return new JmxBean("test",100);
}

В вашем случае, так как вы хотите зарегистрировать jobOperator, просто замените testBean в exporter бобе на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...