gpt4 book ai didi

spring - @Import 覆盖 Spring @PropertySource

转载 作者:IT老高 更新时间:2023-10-28 13:57:44 30 4
gpt4 key购买 nike

我有一处特性 test=default在 DefaultConfig 类中,我使用 @PropertySource 注释使它们可用。

@Configuration
@PropertySource("classpath:default.properties")
public class DefaultConfig {}

然后我希望能够覆盖到 test=override ,它位于类 OverrideConfig 的不同属性文件中,所以我再次使用 @PropertySource。

@Configuration
@Import(DefaultConfig.class)
@PropertySource("classpath:override.properties")
public class OverrideConfig {}

我配置了一个测试来证明它有效。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={OverrideConfig.class})
public class TestPropertyOverride {

@Autowired
private Environment env;

@Test
public void propertyIsOverridden() {
assertEquals("override", env.getProperty("test"));
}

}

当然不是。

org.junit.ComparisonFailure: expected:<[override]> but was:<[default]>

最大化调试,我可以看到发生了什么:

StandardEnvironment:107 - Adding [class path resource [default.properties]] PropertySource with lowest search precedence
StandardEnvironment:107 - Adding [class path resource [override.properties]] PropertySource with lowest search precedence

似乎倒退了。我是否犯了一个简单的错误或误解了这一点,或者您是否希望@Import-ed 配置类中的@PropertySource 定义的属性被@Import-ing 类中的@PropertySource 中定义的属性覆盖?

最佳答案

这是 Helder Sousa 的解决方案,写为 a comment of the JIRA issue由 OP 创建:

[T]he behaviour available in spring xml (one xml importing another xml) is achievable using nested configurations:

@Configuration
@PropertySource("classpath:default.properties")
public class DefaultConfig {}
@Configuration
@PropertySource("classpath:override.properties")
public class OverrideConfig {

@Configuration
@Import(DefaultConfig.class)
static class InnerConfiguration {}

}

With this setup, the properties will be gather in the proper order.

关于spring - @Import 覆盖 Spring @PropertySource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15577125/

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