Überschreiben Spring @PropertySource von @Import

Habe ich eine Eigenschaft test=default in der Klasse DefaultConfig, und ich mache Ihnen zur Verfügung mit @PropertySource annotation.

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

Dann möchte ich in der Lage sein, zu überschreiben, zu test=override, die in einer anderen Datei Eigenschaften in der Klasse OverrideConfig, so dass ich wieder @PropertySource.

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

Konfiguriere ich einen test, um zu beweisen, dass es funktioniert.

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

    @Autowired
    private Environment env;

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

}

Außer natürlich es nicht.

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

Maxing Debuggen kann ich sehen, was passiert:

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

Scheint es rückwärts. Bin ich ein einfacher Fehler oder misthinking, oder würde Sie erwarten, dass die Eigenschaften definiert, die durch ein @ - PropertySource in einer @Import-ed-Konfiguration-Klasse überschrieben werden durch Eigenschaften definiert bin @PropertySource in der @Import-ing-Klasse?

  • Was wahrscheinlich geschieht, ist, dass die Anmerkungen auf Ihre OverrideConfig Klasse werden zuerst ausgewertet und so test=override, dann die DefaultConfig - Klasse importiert und Ihre Anmerkungen werden ausgewertet und test überschrieben werden, um default
  • Aufgeworfenen Problem jira.springsource.org/browse/SPR-10409
InformationsquelleAutor brabster | 2013-03-22
Schreibe einen Kommentar