Необязательный боб в Java - PullRequest
0 голосов
/ 10 марта 2020

У меня есть файл ApplicationConfig. java, который содержит 2 bean-компонента, которые не являются обязательными.

 @Configuration
 @PropertySource("classpath:config/service/application.properties")
 public class ApplicationConfig {
  @Bean
  public ServiceOneClient serviceClient(@Value("${client.one.host}") String host)) {
    return new ClientOneImpl(String.format("%s:%d", host, 80));
  }

  @Bean
  public ServiceTwoClient serviceClient(@Value("${client.two.host}") String host)) {
    return new ClientTwoImpl(String.format("%s:%d", host, 80));
  }
}

Что ж, служба, использующая этот jar-файл, не должна инициализировать обоих клиентов. Но если мы не инициализируем хост для обеих служб, мы получим сообщение об ошибке: org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем, не удалось разрешить заполнитель 'client.one.host'

Есть ли способ пометить боб как необязательный? или другое решение?

1 Ответ

2 голосов
/ 10 марта 2020

Используйте аннотацию @ConditionalOnProperty:

@Configuration
@PropertySource("classpath:config/service/application.properties")
public class ApplicationConfig {
  @Bean
  @ConditionalOnProperty("client.one.host")
  public ServiceOneClient serviceClient(@Value("${client.one.host}") String host)) {
    return new ClientOneImpl(String.format("%s:%d", host, 80));
  }

  @Bean
  @ConditionalOnProperty("client.two.host")
  public ServiceTwoClient serviceClient(@Value("${client.two.host}") String host)) {
    return new ClientTwoImpl(String.format("%s:%d", host, 80));
  }
}

См., Например, Пользовательская автоматическая конфигурация с Spring Boot | Baeldung для получения дополнительной информации о условных при автоматической настройке. Раздел 3.3. Условия собственности описывает аннотацию @ConditionalOnProperty.

...