我有一个身份验证服务,我想在运行时对其进行自动配置,但是将为开发和测试模拟该服务。我想使用@ConfigurationProperties
功能来定义必要的参数,但是我还需要仅能够有条件地创建AuthenticationManager
实例,具体取决于是否配置了实时服务。
我想采用的方法是使用类似@ConditionalOnBean(AuthProperties.class)
的方法,但是
无论属性是否存在,Spring Boot都会创建一个@ConfigurationProperties
类的bean。我可以将验证注释应用于字段,但是如果未配置实时服务,则上下文将根本不会启动。
有没有一种干净的方法可以使配置节以在@ConfigurationProperties
类中指定的属性为条件,而无需在@ConditionalOnProperty
中重复属性名称呢?
最佳答案
您不能只使用application-some_profile.properties文件的配置文件,然后像这样有条件地创建属性bean
@Profile("some_profile")
@Component
@ConfigurationProperties(prefix = "some.selector")
public Class YourConfiguration{
private property option;
}
这样,它只会根据您选择实时或模拟的配置文件而有条件地创建。
比起您可以将@Profile身份验证类的选定配置文件使用单独的方法,还是使用@ConditionalOnBean。那就是个人资料的用途,或者我可能误解了这个问题。