2016-07-21 3 views
-1

пружинных ботинок: 1.4.0.RC1Spring Beans из профилей перепутался

Проблемы, что я имею что, если у вас есть какая-то @Bean методы, определенной в заявке, и вы хотите, чтобы отменить те из a @Configuration с тестовым профилем, например @Profile("test"), бобы из тестового профиля никогда не загружаются, если вы не удалите их из приложения, то есть профиля по умолчанию.

Я не понимаю, почему это так перепутано, конечно, должна быть какая-то настройка предпочтений профиля?

Как и использование по умолчанию, если только нет компонентов с определенным профилем, используйте вместо них.

Если вы используете аннотации @Component с профилями, хотя кажется, что они работают несколько, если вы используете @Primary в сочетании с аннотацией @Bean. Это похоже на хак.

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

Любая помощь в отношении autowire кошмар весны будет иметь большую помощь

+1

Просьба указать код вашей конфигурации. – Roman

ответ

0

Поскольку вы используете 1.4.0.RC1 для тестового сценария, вы можете попробовать новый mocking and spying beans функции, как:

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class MyTest { 

    @MockBean 
    private RemoteService remoteService; 

    @Autowired 
    private Reverser reverser; 

    @Test 
    public void exampleTest() { 
     // RemoteService has been injected into the reverser bean 
     given(this.remoteService.someCall()).willReturn("mock"); 
     String reverse = reverser.reverseSomeCall(); 
     assertThat(reverse).isEqualTo("kcom"); 
    } 
} 

Условие для профиля test. Класс конфигурации, содержащий множество тестовых компонентов, не является хорошей идеей, и его сложно связать с самим тестом.

Для случаев, отличных от теста, вы можете инициализировать свои по умолчанию и переопределяемые компоненты так же, как и то, что сделала Spring Boot. Настройте их в AutoConfiguration s, который обычно имеет более низкий приоритет, чем класс @Configuration, и аннотируется с аннотацией условий, например @ConditionalOnMissingBean.

Смежные вопросы