当我使用@EnableMBeanExport时如何通过Spring JMX集成设置通知侦听器映射

时间:2019-04-24 13:16:39

标签: java spring spring-integration jmx mbeanexporter

正如Spring参考文献https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#jmx-notifications-listeners所说,我需要在声明通知侦听器之后通过调用MBeanExporter.setNotificationListenerMappings方法来设置侦听器映射。

使用基于XML的配置或@Bean批注配置进行声明时  明确地MBeanExportersetNotificationListenerMappings操作很容易完成。如以下代码所示:

@Bean
public AnnotationMBeanExporter mBeanExporter() {
    Map<String, JmxNotificationListener> mappings = new HashMap<>();
    mappings.put("com.foo.spring-jmx-test:name=JmxService", new JmxNotificationListener());

    AnnotationMBeanExporter exporter = new AnnotationMBeanExporter();
    exporter.setRegistrationPolicy(RegistrationPolicy.IGNORE_EXISTING);
    exporter.setNotificationListenerMappings(mappings);
    return exporter;
}

但是当使用@EnableMBeanExport时,它将自动定义一个AnnotationMBeanExporter,我找不到一种方法来设置到MBeanExporter的侦听器映射。因此,有没有一种方法可以在我使用@EnableMBeanExport时设置通知侦听器映射?

谢谢。

1 个答案:

答案 0 :(得分:1)

@EnableMBeanExport在应用程序上下文中注册了一个AnnotationMBeanExporter bean,因此您可以将其注入到您的某些配置中并执行这样的映射注册:

@Autowired
AnnotationMBeanExporter exporter;

@PostConstruct
public void init() {
    this.exporter.setNotificationListenerMappings(...);
}