【问题标题】:Defining beans per multiple spring profiles根据多个弹簧配置文件定义 bean
【发布时间】:2015-11-03 16:52:42
【问题描述】:

我的应用中有 3 个配置文件,名为:dev、test、prod。 我想使用 spring 配置文件来自定义 bean 注入,这样对于配置文件开发和测试我将有一个 bean 实现,而对于配置文件生产我将有另一个。 问题是如何实现这一目标。如何将一个 bean 设置为在两个不同的配置文件中处于活动状态。 我尝试过这样的事情:

@Component
@Profile("dev, test")
class DevTestBean{}

但不幸的是 spring 将其视为一个名为 dev comma space test 的单一配置文件。

【问题讨论】:

    标签: java spring profiles


    【解决方案1】:

    XML解决方案尚未放入官方文档:

    https://docs.spring.io/spring/docs/4.3.12.RELEASE/spring-framework-reference/htmlsingle/#beans-definition-profiles

    所以我把它放在这里:

    <beans profile="dev,foo,bar">
      <!-- (...) -->
    </beans>
    

    【讨论】:

      【解决方案2】:

      你要改成@Profile({"dev", "test"})

      该值必须声明为 Set。 见documentation

      如果一个@Configuration 类被标记为@Profile,那么所有的@Bean 与该类关联的方法和 @Import 注释将是 除非一个或多个指定配置文件处于活动状态,否则将被绕过。这 类似于 Spring XML 中的行为:如果 profile 属性 提供了 beans 元素,例如, 除非至少配置文件“p1”或“p2”,否则不会解析 beans 元素 已被激活。同样,如果 @Component 或 @Configuration 类 用@Profile({"p1", "p2"}) 标记,该类将不会 除非至少配置文件“p1”或“p2”已被注册或处理 已激活。

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 1970-01-01
        • 2017-05-06
        • 2017-05-27
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        相关资源
        最近更新 更多