如何在Spring中为多个配置文件设置默认实现?

时间:2017-01-18 09:58:16

标签: java spring

例如,我有很多个人资料," dev"," prod"," test"等。

interface A

@Component
class DefaultImpl implements A

@Profile("test")
@Component
class TestImpl implements A

我希望TestImpl仅用于配置文件" test",但是我希望所有其他配置文件都使用DefaultImpl。

更新: 为什么@Profile("默认")对我不起作用:

我有两个测试配置文件,即" test1"和" test2"

我在个人资料" test1":

中提供了不同的实现
@Profile("default")
class DefaultImpl extends A

@Profile("test1")
class Test1Impl extends A

现在当我@ActivateProfile(" test2")时,它不会选择DefaultImpl

但是,如果我没有设置个人资料,请执行以下操作:

class DefaultImpl extends A

@Profile("test1")
class Test1Impl extends A

个人资料" test2"最终会有两个豆子并且不知道要连线。

现在,只有这样才有效:

@Profile("test2", "prod", ....)
class DefaultImpl extends A

@Profile("test1")
class Test1Impl extends A

除了在DefaultImpl中添加所有其他配置文件名称之外,还有什么可以做的吗?

2 个答案:

答案 0 :(得分:1)

如果您未指定个人资料,您将获得“默认”个人资料。

因此,在您的示例中,如果您不使用配置文件,则会加载DefaultImpl。如果您将配置文件设置为test:

@ActiveProfiles("test") or -Dspring.profiles.active=test

您将获得bot DefaultImpl和TestImpl

您可以更改以确保DefaultImpl不会运行test:

@Profile("default")
@Component
class DefaultImpl implements A

答案 1 :(得分:0)

在DefaultImpl上使用@Profile("default")

或者,您也可以创建特定的命名默认值并在web.xml中指定它:

<context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>mydefault<param-value>
</context-param>