Mam właściwość test=default
w klasie DefaultConfig i udostępniam je przy użyciu adnotacji @PropertySource.Przesłanianie Spring @PropertySource przez @Import
@Configuration
@PropertySource("classpath:default.properties")
public class DefaultConfig {}
Następnie chcę, aby móc zastąpić do test=override
, który znajduje się w innym pliku właściwości w klasie OverrideConfig, więc ponownie użyć @PropertySource.
@Configuration
@Import(DefaultConfig.class)
@PropertySource("classpath:override.properties")
public class OverrideConfig {}
Konfiguruję test, aby udowodnić, że działa.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={OverrideConfig.class})
public class TestPropertyOverride {
@Autowired
private Environment env;
@Test
public void propertyIsOverridden() {
assertEquals("override", env.getProperty("test"));
}
}
Oczywiście, że nie.
org.junit.ComparisonFailure: expected:<[override]> but was:<[default]>
maxing debugowania, widzę, co się dzieje:
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
Wydaje tyłu. Czy popełniam prosty błąd lub mylę się z tym, czy spodziewalibyście się, że właściwości zdefiniowane przez @PropertySource w klasie konfiguracji @ Import-ed zostaną nadpisane przez właściwości zdefiniowane w am @PropertySource w klasie @ Importing?
Co się dzieje jest to, że prawdopodobnie adnotacje na swojej 'OverrideConfig' klasy są oceniane przede więc' test = override', wówczas 'klasa DefaultConfig' jest importowany i jego adnotacje są oceniane i' test' zastąpieniem do 'default' –
Wywołany problem https://jira.springsource.org/browse/SPR-10409 – Brabster