有条件 属性 spring 启动时的 Consul 配置
Consul configuration on conditional property spring boot
如何在条件 属性 上编写 consul 配置 class,我已经完成并测试了属性,
但是想要编写配置 class 并且该配置应该按条件加载。
如果我答对了你的问题,你想创建一个配置 class 但只有在满足某些条件时才加载此配置:
@Configuration
public class MyConfiguration {
@Bean
public ??? myBean() {
....
}
}
在这种情况下,您应该使用 Spring 4.
中首次附带的 @Conditional
注释
有很多类似@Conditional
的注释,您只需要浏览一下您需要的即可。
- @ConditionalOnClass
- @ConditionalOnProperty
- @ConditionalOnMissingProperty
- @ConditionalOnWebApplication
- @ConditionalOnBean
- @ConditionalOnMissingBean
- @ConditionalOnClass
- .....(可能还有其他的)
如果这还不够,您甚至可以推出自己的条件逻辑。由于没有直接在问题中提出,我将只提供一个 link(其中之一)articles 来说明如何做。
因此您可以使用,例如:
@Configuration
@ConditionalOnProperty(value="my.consul.integration.enabled", havingValue = "true")
public class MyConfiguration {
@Bean
public ??? myBean() {
....
}
}
您还可以将条件逻辑放在单个 bean 的粒度上。
这里的要求是 运行 consul 配置只有当某个 属性 被启用时(tools.consul.enabled=true
来自你的评论)
想法是不在默认 application.yml
文件中而是在其他地方定义一组与 consul 相关的属性,例如 consul-integration.properties
文件,并使用仅打开的配置读取此文件如果满足 @ConditionOnProperty
。
示例:
@Configuration
@ConditionalOnProperty(value="tools.consul.enabled", havingValue=true)
@PropertySources({
@PropertySource("classpath:consul-integration.properties)
})
public class ToolConsulSampleConfiguration {
}
如何在条件 属性 上编写 consul 配置 class,我已经完成并测试了属性,
但是想要编写配置 class 并且该配置应该按条件加载。
如果我答对了你的问题,你想创建一个配置 class 但只有在满足某些条件时才加载此配置:
@Configuration
public class MyConfiguration {
@Bean
public ??? myBean() {
....
}
}
在这种情况下,您应该使用 Spring 4.
中首次附带的@Conditional
注释
有很多类似@Conditional
的注释,您只需要浏览一下您需要的即可。
- @ConditionalOnClass
- @ConditionalOnProperty
- @ConditionalOnMissingProperty
- @ConditionalOnWebApplication
- @ConditionalOnBean
- @ConditionalOnMissingBean
- @ConditionalOnClass
- .....(可能还有其他的)
如果这还不够,您甚至可以推出自己的条件逻辑。由于没有直接在问题中提出,我将只提供一个 link(其中之一)articles 来说明如何做。
因此您可以使用,例如:
@Configuration
@ConditionalOnProperty(value="my.consul.integration.enabled", havingValue = "true")
public class MyConfiguration {
@Bean
public ??? myBean() {
....
}
}
您还可以将条件逻辑放在单个 bean 的粒度上。
这里的要求是 运行 consul 配置只有当某个 属性 被启用时(tools.consul.enabled=true
来自你的评论)
想法是不在默认 application.yml
文件中而是在其他地方定义一组与 consul 相关的属性,例如 consul-integration.properties
文件,并使用仅打开的配置读取此文件如果满足 @ConditionOnProperty
。
示例:
@Configuration
@ConditionalOnProperty(value="tools.consul.enabled", havingValue=true)
@PropertySources({
@PropertySource("classpath:consul-integration.properties)
})
public class ToolConsulSampleConfiguration {
}