我在DefaultConfig類中有一個屬性test=default
,我使用@PropertySource註釋使它們可用。通過@Import覆蓋Spring @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類中的am @PropertySource中定義的屬性覆蓋?
可能發生的情況是,您的OverrideConfig類的註釋首先被評估,然後'test = override',那麼'DefaultConfig'類被導入,其註釋被評估並且'test'被覆蓋'default' – 2013-03-22 20:36:18
引發問題https://jira.springsource.org/browse/SPR-10409 – Brabster 2013-03-23 08:42:08