У моего приложения Spring Boot есть bean-компонент:
@Configuration
public class JmxRmiConfig {
@Value("${jmx.rmi.host:localhost}")
private String rmiHost;
@Value("${jmx.rmi.port:1099}")
private Integer rmiPort;
@Bean
public RmiRegistryFactoryBean rmiRegistry() {
final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();
rmiRegistryFactoryBean.setPort(rmiPort);
rmiRegistryFactoryBean.setAlwaysCreate(true);
return rmiRegistryFactoryBean;
}
@Bean
@DependsOn("rmiRegistry")
public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {
final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
connectorServerFactoryBean.setObjectName("connector:name=rmi");
connectorServerFactoryBean.setServiceUrl(String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));
return connectorServerFactoryBean;
}
}
У меня есть два модульных теста, аннотированные так:
@AutoConfigureMockMvc
@SpringBootTest
@Unroll
class ... extends Specification { ... }
(Unroll и Specification - оба из spock.lang)
Когда я запускаю их вместе, используя maven / surefire, второй тестовый класс завершается с ошибкой:
org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем'rmiRegistry' определено в ресурсе пути к классу [uk / ac / progress / hedd / api / config / JmxRmiConfig.class]: сбой вызова метода init;Вложенное исключение - java.rmi.server.ExportException: внутренняя ошибка: ObjID уже используется
Похоже, он заново создает RmiRegistry для второго класса, не разрушая первый.
Поскольку у меня есть другие тесты без @AutoConfigureMockMvc, которые отлично работают вместе, моя гипотеза состоит в том, что @AutoConfigureMockMvc вызывает проблему.
Как мне заставить оба теста работать вместе?