【问题标题】:Set unique bean name javax.management.InstanceAlreadyExistsException设置唯一的 bean 名称 javax.management.InstanceAlreadyExistsException
【发布时间】:2018-07-08 09:35:18
【问题描述】:

当我使用 Spring AMQP 部署 2 个包时,我在以下代码中收到 JMX 错误:

    @Bean
    public CachingConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(HOST);
        connectionFactory.setBeanName("Test_123");
        return connectionFactory;
    }

我错了Caused by: javax.management.InstanceAlreadyExistsException: org.springframework.amqp.rabbit.connection:name=connectionFactory,type=CachingConnectionFactory

完整的错误堆栈: https://pastebin.com/CdU3epMz

如何为 connectionFactory 设置唯一名称?

编辑:

我也试过把 application.properties 放在 src/main/java/resources 这个配置下:

spring.jmx.enabled=false
spring.datasource.jmx-enabled=false
spring.jmx.default-domain=ssds # JMX domain name.
spring.jmx.server=apiServer # MBeanServer bean name.
management.metrics.export.jmx.domain=metccriddcs # Metrics JMX domain name.
management.metrics.export.jmx.enabled=false # Whether exporting of metrics to JMX is enabled.
management.endpoints.jmx.exposure.exclude=*

但我得到了同样的错误。

【问题讨论】:

  • 我认为这里已经处理了一个类似的问题:link
  • 是的,这解决了我的问题。有没有办法使用@Bean 配置来获得相同的结果?
  • 我能想到的方法有两种。第一个是完全禁用 jmx(如果你不需要它)。第二个是为两者设置属性spring.application.name,并希望您公开的jmx-bean使用应用程序名称作为前缀。
  • 我已经尝试了一些配置。查看更新后的帖子。

标签: java spring spring-amqp spring-jmx


【解决方案1】:

解决办法:

... implements ObjectNamingStrategy {

    @Override
    public ObjectName getObjectName(Object managedBean, String beanKey) throws MalformedObjectNameException {
        Class managedClass = AopUtils.getTargetClass(managedBean);
        String domain = ClassUtils.getPackageName(managedClass);

        Hashtable<String, String> properties = new Hashtable<>();
        properties.put("type", ClassUtils.getShortName(managedClass));
        properties.put("name", "asdsdsd");
        // ensure the application name is included as a property in the object name
        properties.put("app", "api");
        return ObjectNameManager.getInstance(domain, properties);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多