我在类 DefaultConfig 中有一个属性test=default
,我正在使用 @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 中定义的属性覆盖?