java - Java 中非强制 bean

标签 java spring config javabeans

我有 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:创建名为 name 的 bean 时出错,无法解析占位符“client.one.host”

有没有办法将 bean 标记为非强制?或者其他解决方案?

最佳答案

使用@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));
  }
}

参见例如A Custom Auto-Configuration with Spring Boot | Baeldung有关自动配置时条件的更多信息。节3.3. Property Conditions描述了@ConditionalOnProperty注释。

关于java - Java 中非强制 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60609250/

相关文章:

java - 比较列表中的元素并交换它们。 java

java - servlet 上下文错误

spring - 如何将 Spring 3 Bean 注入(inject) JSF 2 转换器

javascript - 多级静态路由架构React Router v4

node.js - 如何从 npm 中删除 cli 配置

php - 如何在Nginx PHP配置中启用错误报告

java - 如何在 Java 中检查堆栈限制并完成 Chicken Scheme 风格的递归?

java - JDBC 表不存在但确实存在

java - c :out tag did not show result

java - Jackson:尝试将 JSON 反序列化为 java 对象时未解析的前向引用