我有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”
有没有办法将bean标记为非强制性的?或其他解决方案?
最佳答案
@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
批注。