2013-01-08 5 views
11

Mit dieser Klasse überschreiben Sie eine bereits festgelegte @PropertySource in einer anderen Config-Klasse.So überschreiben Sie Spring 3.1 @PropertySource, um IgnoreResourceNotFound & IgnoreUnresolvablePlaceholders festzulegen

@Configuration 
@PropertySource({ "classpath:${env.placeholder}/app.properties" }) 
public class PropertyOverrideConfig { 

} 

Aber immer wenn die Datei oder der Platzhalter fehlt, wird der Kontext geladen. Ich muss die folgenden Flags auf diese geladene Annotationseigenschaft setzen, damit sie überspringt, wenn sie die Eigenschaft nicht finden kann.

 setIgnoreResourceNotFound(true); 
     setIgnoreUnresolvablePlaceholders(true); 

Question1: Was den geeigneten Weg wäre, diesen Flags für die @PropertySource zu setzen?

Updates: Versucht ein @Bean zur selben Klasse, ohne dass Annotation Hinzufügen Bezug this Seite, es ist nicht die Eigenschaft Datei entweder Kommissionierung. Ich habe keine XML-Konfiguration.

@Bean 
public static PropertySourcesPlaceholderConfigurer properties() { 
    final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer(); 

    Resource[] resources = new ClassPathResource[ ] { 
        new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 

    pspc.setLocations(resources); 
    pspc.setIgnoreResourceNotFound(true); 
    pspc.setIgnoreUnresolvablePlaceholders(true); 
    return pspc; 
} 

Question2: Ich bin sicher, dass ich etwas fehle, konnte aber nicht herausfinden, was es ist, jede Hilfe wäre toll.

+0

Sind Sie sicher, dass keine anderen PropertySourcesPlaceholderConfigurer-Instanzen registriert sind? Vielleicht sollten Sie die Annotated-Methode '@ Bean' machen, die PropertySourcesPlaceholderConfigurer statisch zurückgibt (wie das Java-Dokument für' @ Bean' empfiehlt) –

+0

Danke @BorisTreukhov, ich habe die Statistik beim Posten verpasst. In der Zwischenzeit, was passieren würde, wenn ich die gleiche 'PropertySourcesPlaceholderConfigurer' bereits Bean auf einer anderen Config registriert habe ?? – raksja

+0

Ich erinnere mich nicht genau, aber Sie können mehrere PropertySourcesPlaceholderConfigurers haben (und sie verschiedene Platzhalter Präfixe/Suffixe angeben) - vielleicht gibt es einen anderen Platzhalterkonfigurator, die Beschwerden über nicht auflösbare Platzhalter –

Antwort

4

Ich glaube, ich endlich die Antwort für den Question1 herausgefunden:

Wie Objekte Ignorieren Flags setzen durch @PropertySource hinzugefügt?

Es ist nicht dort im Frühjahr noch, sein worden als Minor Verbesserung vorgeschlagen. Ich hoffe, dass in Zukunft ein zusätzliches Attribut der Annotation hinzugefügt wird.

SPR-8371

noch über die Art und Weise nicht sicher, erwähnt das Szenario zu erreichen und keine Antwort für Question2.

+1

Es gibt auch [SPR-10325] (https : //jira.springsource.org/browse/SPR-10325): "Erlaube ignoreResourceNotFound auf @PropertySource", stimme dafür! – Robin

0

Versuchen classpath: zu entfernen, wird es nicht, wenn ClassPathResource mit benötigt:

new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 
1

nicht wirklich eine Lösung, aber eine Abhilfe, wenn Sie 3 zum Frühling zu halten haben: einen Dummy-Standard verwenden, die, dh existiert in Ihrem Fall:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" }) 
Verwandte Themen