在Spring Boot中启用JMX

时间:2018-07-06 08:56:16

标签: spring-boot spring-batch spring-jmx

这是我的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文件夹,但什么也没看到。

因此,现在我选择一些自定义bean并添加@ManagedResource,我知道这些。

但是,如果我想公开像@JobOperator这样的春季批处理豆怎么办?

在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时,我在Spring Boot的@Configuration文件中执行:

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

我无法在@Bean注释下添加@ManagedResource。那么如何将JobOperator公开为JMX bean?

1 个答案:

答案 0 :(得分:0)

这是我在代码中的操作方式-

@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 bean中的exporter