例如,我有很多个人资料," 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中添加所有其他配置文件名称之外,还有什么可以做的吗?
答案 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>