测试:无法注册MBean实例已经存在

问题描述 投票:1回答:3

我们有一些集成测试,但最近当@ManagedResource是在路上,我们都面临着一个问题:

Unable to register MBean [com.api.configuration.ApiConfiguration@63fde7ca] with key 'apiConfiguration'; nested exception is javax.management.InstanceAlreadyExistsException: api:name=ApiConfiguration

而违规豆看起来是这样的:

@Component
@ManagedResource(objectName = "api:name=ApiConfiguration")
public class ApiConfiguration {

    @ManagedOperation   
    public void reloadConfiguration() {
        // do something
    }

}

我们试图在没有成功的每个集成测试添加@DirtiesContext。只有从运行Maven的或全部的IntelliJ测试时出现的错误。如果我们只运行它的工作测试失败之一。

java testing integration-testing jmx
3个回答
2
投票

如果您使用的是基于Java的配置,您只需要添加此

@EnableMBeanExport(注册= RegistrationPolicy.REPLACE_EXISTING)OR @EnableMBeanExport(注册= RegistrationPolicy.IGNORE_EXISTING)

因此,将(根据您的配置)更换或使用已有的bean,它不会给任何类型的错误


0
投票

该错误是很清楚的,已经有一个实例,有人正试图创建一个。它失败。

要解决这个问题的一种方法,在问题只出在测试中,是忽略重复MBean的注册:

<context:mbean-export registration="ignoreExisting"/>

或者,如果你喜欢的注释方式:

@Autowired
MBeanExporter mBeanExporter;

然后设置策略来忽略:

mBeanExporter.setRegistrationPolicy(RegistrationPolicy.IGNORE_EXISTING);

默认情况下,策略设置为FAIL_ON_EXISTING。您还可以将其设置为REPLACE_EXISTING。


0
投票

如果你有你的测试上面的@EnableAutoConfiguration注解,认为将其删除。这帮助了我。

© www.soinside.com 2019 - 2024. All rights reserved.