如此令人困惑@IfProfileValue
与以下无关@Profile
or
@ActiveProfiles
.
这是正确的,我在这里详细解释了这一点:https://stackoverflow.com/a/23627479/388980
...我假设您已经看到了,因为您昨天评论了我的答案。
原因是@IfProfileValue
与以下无关@Profile
or @ActiveProfiles
是由于框架的演变。请参阅下文了解更多详情。
@Profile
测试配置文件是否处于活动状态,@ActiveProfiles
将它们设置为活动状态,并且@IfProfileValue
允许
你在春天检查事情Environment
.
这些说法并不完全正确,尤其是最后一部分。
@Profile
用于选择性地启用组件(例如,@Service
, ETC。),@Configuration
类,或@Bean
方法(如果指定的之一)bean 定义配置文件春季活跃Environment
为了ApplicationContext
。该注释与测试没有直接关系:@Profile
should not用于测试类。
@ActiveProfiles
用于指定哪个bean 定义配置文件(例如,那些通过@Profile
)在加载时应该处于活动状态ApplicationContext
用于集成测试。
@IfProfileValue
does not允许你在春天检查事情Environment
。我不知道你为什么这么假设,因为 Spring 框架中的任何文档都没有说明这一点。正如我在上述主题中所说:
请注意@IfProfileValue
在 Spring Framework 2.0 中引入,long在 bean 定义配置文件的概念之前,以及@ActiveProfiles
首次在 Spring Framework 3.1 中引入。
在上述主题中,我还指出了以下几点:
在考虑语义时,“配置文件”一词可能会产生误导@IfProfileValue
。关键是要考虑“测试组”(如 TestNG 中的测试组)而不是“配置文件”。请参阅中的示例@IfProfileValue 的 JavaDoc.
我该如何使用@IfProfileValue
检测我的个人资料是否处于活动状态?
这取决于,而且......我假设你的意思是bean 定义概要文件当你说“个人资料”时。
如果您正在使用@ActiveProfiles
设置bean 定义配置文件对于您的测试,您当前无法使用@IfProfileValue
以确定是否bean 定义概要文件是活跃的,因为bean 定义配置文件配置通过@ActiveProfiles
直接在测试中设置ApplicationContext
而不是作为 Java 系统属性。
但是,如果您正在设置bean 定义配置文件 only通过spring.profiles.active
系统属性,那么它would可以使用@IfProfileValue
以确定是否bean 定义概要文件是活跃的,因为@IfProfileValue
实际上适用于系统属性。例如,您可以使用以下内容:
@IfProfileValue(name = "spring.profiles.active", value = "test")
I tried @IfProfileValue(name = "activeProfiles", value = "test")
但
这似乎跳过了测试,这意味着它不匹配。
从此以后那行不通了activeProfiles
是不正确的属性名称。正确的系统属性名称是spring.profiles.active
. See AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME
了解详情。
事实是@IfProfileValue
不协调工作@ActiveProfiles
对于 Spring 团队来说是一个已知问题。请查阅以下 JIRA 问题以了解更多详细信息,并根据需要加入讨论。
- https://jira.spring.io/browse/SPR-7754
- https://jira.spring.io/browse/SPR-8982
- https://jira.spring.io/browse/SPR-11677
希望这能为您澄清情况!
Sam (Spring TestContext 框架的作者)