2016-04-04 6 views
2

Verwenden von Feder 3.2.5. Ich habe ein Webprojekt mit zwei Anwendungskontext (ein Elternteil des anderen).Spring-Umgebung kann Platzhalter nicht lösen

I konfiguriert, in XML, ein Platzhalter configurer wie folgt aus:

<context:property-placeholder location="WEB-INF/properties/*.properties, classpath:local.config.properties, file:${global.config.file}" 
           ignore-unresolvable="true" 
           ignore-resource-not-found="false"/> 

Die Variable "global.config.file" ist ein Pfad zu einer Datei in die JVM Argumente angegeben tomcat weitergegeben zu starten.

In meinem Code, ich Werte aus diesen Dateien wie diese erfolgreich injizieren:

@Value("${blabla}") 
private String blabla; 

Allerdings, wenn ich versuche Platzhalter programmatisch der über Federobjektumgebung, zu lösen, Platzhalter werden nicht mit realen Werten ersetzt:

@Inject 
Environment env; 
// ... 

public void test() { 
    String blabla = env.resolvePlaceholders("${blabla}"); 
} 

Die blabla Variablen wird es ungelösten Wert enthalten: "$ {blabla}" auch tun:

env.getProperty("blabla"); 

gibt null zurück. Bitte beachte, dass ich verwende Kontext Schema Lage oberhalb 3,0:

http://www.springframework.org/schema/context/spring-context-3.2.xsd 

Kann jemand mir helfen, zu verstehen, was ich fehle? Oder irgendeine Ahnung, wie man weiter debuggt?

+0

Es gibt nichts, wie es so entworfen zu debuggen ist funktioniert. Der registrierte 'PropertySourcesPlaceholderConfigurer' verwendet die Umgebung, um Eigenschaften zu suchen, die er nicht von den geladenen Dateien finden kann. Es fügt die geladenen Eigenschaften nicht zu der 'Umgebung' hinzu, wenn Sie möchten, dass Sie eine '@ Configuration'-Klasse benötigen und eine' @ PropertySource'-Annotation hinzufügen, wenn diese der 'Umgebung' hinzugefügt werden. –

+0

Alles, was Sie wollen, ist die Ressource programmatisch zu bekommen? Wenn das der Fall ist, kreuzen Sie [this] an (http://stackoverflow.com/questions/13265545/using-reloadablesourcebundlemessagesource-in-annotations-injection). Ich benutze es derzeit so und es funktioniert für Eigenschaftendateien. – dambros

+0

Ja, ich möchte Zeichenfolgenausdrücke mit Platzhaltern zur Laufzeit auflösen. M. Deinum: Bedeutet das, dass, wenn ich das Namespacetag durch manuelle Definition von PropertySources ersetze, es funktioniert? Ich brauche es auch in Spring-Konfigurationsdateien zu arbeiten. – baraber

Antwort

0

mit classpath*: zum Beispiel Versuchen:

<context:property-placeholder location="classpath*:WEB-INF/properties/*.properties, classpath*:local.config.properties, file:${global.config.file}" 
          ignore-unresolvable="true" 
          ignore-resource-not-found="false"/> 
Verwandte Themen