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

Sal*_*lab 3 java testing integration-testing jmx

我们进行了一些集成测试,但最近当@ManagedResource出现问题时,我们遇到了一个问题:

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

有问题的 bean 看起来像这样:

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

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

}
Run Code Online (Sandbox Code Playgroud)

我们尝试@DirtiesContext在每个集成测试中添加一个,但没有成功。仅当从 Maven 或 IntelliJ 运行所有测试时才会出现该错误。如果我们只运行其中一项失败的测试,它就会起作用。

小智 5

如果你使用基于java的配置,你只需要添加这个

@EnableMBeanExport(registration=RegistrationPolicy.REPLACE_EXISTING)
Run Code Online (Sandbox Code Playgroud)

或者

@EnableMBeanExport(registration=RegistrationPolicy.IGNORE_EXISTING)
Run Code Online (Sandbox Code Playgroud)

因此它将替换或使用已经存在的bean(根据您的配置)并且不会给出任何类型的错误