Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置唯一的bean名称javax.management.InstanceAlreadyExistsException_Java_Spring_Spring Amqp_Spring Jmx - Fatal编程技术网

设置唯一的bean名称javax.management.InstanceAlreadyExistsException

设置唯一的bean名称javax.management.InstanceAlreadyExistsException,java,spring,spring-amqp,spring-jmx,Java,Spring,Spring Amqp,Spring Jmx,当我使用Spring AMQP部署2个包时,在下面的代码中出现JMX错误: @Bean public CachingConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(HOST); connectionFactory.setBeanName("Test_123");

当我使用Spring AMQP部署2个包时,在下面的代码中出现JMX错误:

    @Bean
    public CachingConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(HOST);
        connectionFactory.setBeanName("Test_123");
        return connectionFactory;
    }
I错误
由以下原因引起:javax.management.instancealreadyexistException:org.springframework.amqp.rabbit.connection:name=connectionFactory,type=CachingConnectionFactory

完整错误堆栈:

如何为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=*
但是我得到了同样的错误。

解决方案:

... 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);
    }

}
。。。实现ObjectNamingStrategy{
@凌驾
public ObjectName getObjectName(对象managedBean,字符串beanKey)引发格式错误的ObjectNameException{
类managedClass=AopUtils.getTargetClass(managedBean);
String domain=ClassUtils.getPackageName(managedClass);
Hashtable属性=新的Hashtable();
properties.put(“type”,ClassUtils.getShortName(managedClass));
出售(“名称”、“ASDSD”);
//确保应用程序名称作为属性包含在对象名称中
属性。put(“应用程序”、“api”);
返回ObjectNameManager.getInstance(域、属性);
}
}

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