我有以下组件类,我想根据属性实例化它;
@Component("componentA")
@PropertySource("classpath:components.properties")
@ConditionalOnExpression("'${components.enabled}'.contains('componentA')")
public class ComponentA implements ComponentIF {
...
components.properties文件具有以下属性;
components.enabled=componentA,componentB,componentD
问题是在评估@PropertySource("classpath:components.properties")
期间似乎无法使用@ConditionalOnExpression("'${components.enabled}'.contains('componentA')")
。
另一方面,如果我将components.enabled=componentA,componentB,componentD
属性放在spring-boot的application.properties
文件中,则该属性在ConditionalOnExpression评估期间变为可用,并且它按预期工作。
但是,我想使用components.properties
来保持所有组件特定属性在同一个位置。
在ConditionalOnExpression期间,PropertySource是否无效的任何想法?
答案 0 :(得分:1)
I also had the same problem。就我而言,我想根据条件启用某些方面。似乎spring在初始化的早期阶段读取了一些值,并且很难覆盖这些值。 (如@ConditionalOnExpression
的值)。
为了设置这些变量的值。
application.properties
中指定属性。始终从此文件中读取在早期阶段加载的变量。application.properties
定义为application-profile.properties
并激活相应的配置文件。-Dproperty.key=value
。其他如果您想使用属性文件本身覆盖属性,我建议您go through this answer。
所有这些都可以组合在一起。 To know about their precedence refer this。