因此
@IfProfilevalue,与@Profile或 无关@ActiveProfiles。
…我假设您已经看过,因为您昨天评论了我的答案。
其原因
@IfProfilevalue有没有关系
@Profile或者
@ActiveProfiles是由于架构的演变。有关更多详细信息,请参见下文。
@Profile测试以查看配置文件是否处于活动状态,@ActiveProfiles将其设置为活动状态,并@IfProfilevalue允许您检查Spring中的内容Environment。
这些陈述并不完全正确,尤其是最后一部分。
@Profile如果有一个指定的 bean定义配置文件
在Spring中对于处于活动状态,则用来用于有选择地启用组件(例如
@Service等),
@Configuration类或
@Bean方法。这个注解不直接相关测试:应该
不是 被一个测试类使用。
Environment``ApplicationContext``@Profile
@ActiveProfiles用于指定在加载用于集成测试的 Bean定义配置文件 (例如,通过声明的
Bean
@Profile)应该处于活动状态
ApplicationContext。
@IfProfilevalue并 没有
允许你检查的事在春节
Environment。我不确定您为什么要这样做,因为Spring框架中的任何文档都没有说明这一点。正如我在上述线程中所述:
请注意,它@IfProfilevalue
是在Spring framework 2.0中引入的, 早
于bean定义配置文件的概念,并且@ActiveProfiles
是在Spring framework 3.1中首次引入的。
在上述线程中,我还指出了以下几点:
考虑到的语义时,“配置文件”一词可能会引起误解@IfProfilevalue
。关键是要考虑“测试组”(如TestNG中的那些)而不是“配置文件”。请参阅JavaDoc中@IfProfilevalue的示例。
如何使用
@IfProfilevalue检测我的个人资料是否处于活动状态?
这取决于,并且…我假设您所说的“ profile” 是指 bean定义配置 文件。
如果
@ActiveProfiles用于设置测试的 Bean定义配置文件 ,则当前不能
@IfProfilevalue用来确定
Bean定义配置文件 是否处于活动状态,因为通过配置的
Bean定义配置文件
@ActiveProfiles是直接在测试中设置的,
ApplicationContext而不是作为Java系统属性设置的。
但是,如果你设置 的bean定义配置文件 只能 通过
spring.profiles.active系统属性,那么 就
可以使用
@IfProfilevalue,以确定是否一个 bean定义配置文件
是积极的,因为
@IfProfilevalue事实上作品与系统性能。例如,您可以使用以下代码:
@IfProfilevalue(name = "spring.profiles.active", value = "test")
我试过了,
@IfProfilevalue(name = "activeProfiles", value ="test")但是似乎跳过了测试,这意味着它不匹配。
那
activeProfiles是不正确的,因为属性名称不正确。正确的系统属性名称是
spring.profiles.active。有关
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 framework的作者 )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)