每个弹簧轮廓定义豆类

时间:2015-08-11 12:45:08

标签: java spring profiles

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

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

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

2 个答案:

答案 0 :(得分:7)

您必须更改为@Profile({"dev", "test"})

该值必须声明为Set。 请参阅documentation

  

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

答案 1 :(得分:0)

XML解决方案尚未放在官方文档中

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

为便于记录,我将其放在此处:

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