开发者社区 问答 正文

按属性切换spring boot bean定义并允许自定义bean

创建第一个简单测试时,我假设已注入FooService,但由于没有为该Service接口注册任何bean,所以我得到了ApplicationContext Exception 。在此测试中,我没有为Yaml中的“ service-type”设置任何值,而是依靠默认的“ foo”。

我的错误在哪里?我不能在两个bean上使用ConditionalOnMissingBean吗?评估属性条件时是否不考虑默认的“ foo”?还有其他方法可以解决一般问题:提供比默认bean更多的功能,并且仍然允许用户覆盖吗?

展开
收起
游客ufivfoddcd53c 2020-01-04 11:49:27 918 分享 版权
1 条回答
写回答
取消 提交回答
  • 实现由进行检查OnPropertyCondition,Environment以检查属性是否存在。在带@ConfigurationProperties注释的类中添加属性不会将该值添加到属性中。因此,检查仍然失败。

    但是,@ConditionalOnPropertyals具有matchIfMissing可以设置的属性。默认值是false这样,如果将其设置为true,则其值foo将与未显式设置的值匹配。

    @ConditionalOnProperty(name="service-type", 
                           havingValue = "foo", 
                           matchIfMissing=true)
    
    2020-01-04 11:49:54
    赞同 展开评论