クラス DefaultConfig にプロパティtest=default
があり、@PropertySource アノテーションを使用してそれらを使用できるようにしています。
@Configuration
@PropertySource("classpath:default.properties")
public class DefaultConfig {}
次に、OverrideConfig クラスの別のプロパティ ファイルにある をオーバーライドできるようにしたいtest=override
ので、@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 で定義されたプロパティによってオーバーライドされることを期待しますか?