gpt4 book ai didi

java - 如何使用@IfProfileValue 来测试配置文件是否处于 Activity 状态?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:39 25 4
gpt4 key购买 nike

令人困惑的是 @IfProfileValue@Profile@ActiveProfiles 无关。 @Profile 测试配置文件是否处于 Activity 状态,@ActiveProfiles 将它们设置为 Activity 状态,@IfProfileValue 允许您在 Spring 环境。唔?我会弃用所有这些并添加新的 @IfEnvironment@IfProfile@ActivateProfiles

除了评论,我如何使用 @IfProfileValue 来检测我是否有一个配置文件处于 Activity 状态?目前我没有在这个项目上使用 Spring Boot。答案应该显示代码,我们假设我希望在配置文件激活为 @ActiveProfiles( "test") 时运行测试。

我尝试了 @IfProfileValue(name = "activeProfiles", value = "test") 但似乎跳过了测试,这意味着它不匹配。我推测问题可能与 ActiveProfiles 是一个 Collection 这一事实有关。

最佳答案

So confusingly @IfProfileValue has nothing to do with @Profile or @ActiveProfiles.

没错,我在这里详细解释了这一点:https://stackoverflow.com/a/23627479/388980

...我假设您已经看到了,因为您昨天对我的回答发表了评论。

@IfProfileValue的原因与@Profile无关或 @ActiveProfiles是由于框架的演变。有关详细信息,请参见下文。

@Profile tests to see if a profile is active, @ActiveProfiles sets them as active, and @IfProfileValue allows you to check things in Spring Environment.

这些说法并不完全正确,尤其是最后一部分。

@Profile用于有选择地启用组件(例如 @Service 等),@Configuration类,或 @Bean如果指定的 bean 定义配置文件之一 在 Spring 中处于 Activity 状态,则方法 Environment对于 ApplicationContext .此注释与测试没有直接关系:@Profile 不应用于测试类。

@ActiveProfiles用于指定在加载 @Profile 时应激活哪些 bean 定义配置文件(例如,通过 ApplicationContext 声明的配置文件)。用于集成测试。

@IfProfileValue 允许您在 Spring 中检查内容 Environment .我不确定您为什么要这样假设,因为 Spring Framework 中的文档都没有说明这一点。正如我在上述主题中所述:

请注意 @IfProfileValue在 Spring Framework 2.0 中引入,long 在 bean 定义配置文件的概念之前,并且 @ActiveProfiles在 Spring Framework 3.1 中首次引入。

在上述话题中,我还指出了以下几点:

在考虑 @IfProfileValue 的语义时,术语“配置文件”可能会产生误导.关键是要考虑“测试组”(如 TestNG 中的那些)而不是“配置文件”。请参阅 JavaDoc for @IfProfileValue 中的示例.

how can I use @IfProfileValue to detect whether i have a profile active?

这取决于,并且...我假设当您说“配置文件”时,您指的是 bean 定义配置文件

如果您使用 @ActiveProfiles要为您的测试设置bean 定义配置文件,您当前不能使用@IfProfileValue确定 bean 定义配置文件 是否处于 Activity 状态,因为 bean 定义配置文件 通过 @ActiveProfiles 配置直接在测试的 ApplicationContext 中设置而不是作为 Java 系统属性。

但是,如果您通过 spring.profiles.active 设置bean 定义配置文件系统属性,那么它可以使用@IfProfileValue确定 bean 定义配置文件 是否处于 Activity 状态,因为 @IfProfileValue实际上适用于系统属性。例如,您可以使用以下内容:

@IfProfileValue(name = "spring.profiles.active", value = "test")

I tried @IfProfileValue(name = "activeProfiles", value = "test") but that seems to have the test skipped, which means it's not matching.

activeProfiles 之后就不行了是不正确的属性名称。正确的系统属性名称是 spring.profiles.active .参见 AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME了解详情。


事实@IfProfileValue@ActiveProfiles 不协调是 Spring 团队的已知问题。请查阅以下 JIRA 问题以获取更多详细信息,并根据需要加入讨论。

希望这能为您澄清情况!

Sam(Spring TestContext Framework 的作者)

关于java - 如何使用@IfProfileValue 来测试配置文件是否处于 Activity 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33016848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com