Тест интеграции Spring Boot - BeanDefinitionOverrideException - PullRequest
0 голосов
/ 06 января 2020

У меня есть тест Spring Boot Integration с классом, определенным следующим образом.

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TestApplication.class})
@Transactional
public class AuthorisationManagerControllerRequestIT
{
...

Я получаю следующее исключение:

Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'org.springframework.transaction.config.internalTransactionAdvisor' defined in class path resource [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration; factoryMethodName=transactionAdvisor; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class]] for bean 'org.springframework.transaction.config.internalTransactionAdvisor': There is already [Root bean: class [org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.

Мой класс TestApplication определен следующим образом:

@SpringBootApplication
@ComponentScan(excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Application.class)
})
@ImportResource({
        "classpath:properties-context.xml"          
})
public class TestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(TestApplication.class, args);
    }
}

Считывает из контекста свойств. xml, который определяется следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/util
                            http://www.springframework.org/schema/util/spring-util.xsd">

    <context:property-placeholder location="${CONFIG.ROOT}/external.properties"/>


</beans>

Считывает из файла с именем external.properties. У меня есть свойство 'spring.main.allow-bean-definition-overriding = true', установленное в моем внешнем файле свойств. Я добавил это, потому что, когда я запускал приложение до того, как появилось то же исключение, но больше не появляется после добавления этого.

Что нужно, чтобы это исключение появилось в моем интеграционном тесте?

1 Ответ

0 голосов
/ 06 января 2020

Что ж, это кажется логичным, учитывая вашу ошибку: org.springframework.beans.factory.support.BeanDefinitionOverrideException генерируется, когда spring создает бин с тем же именем, что и уже созданный. А свойства spring.main.allow-bean-definition-overriding=true, которые по умолчанию отключены для Spring-boot 2, созданы для того, чтобы вы могли переопределять bean-компоненты.

Я не понимаю, почему у вас 2 компонента с одинаковыми параметрами Сделки ...

...