Optional @PropertySource Lage
Ich bin mit Spring 3.2 in einer web-Anwendung, und ich möchte einen .properties
- Datei in den Klassenpfad enthält die default-Werte. Der Benutzer sollte in der Lage sein, um JNDI verwenden Sie zum definieren einer Lage, wo ein anderer .properties
gespeichert ist, die überschreibt die Standardwerte.
Folgende funktioniert, solange der Benutzer hat die configLocation
als JNDI-Eigenschaft.
@Configuration
@PropertySource({ "classpath:default.properties", "file:${java:comp/env/configLocation}/override.properties" })
public class AppConfig
{
}
Jedoch die externen überschreibt sollte optional sein und so sollten die JNDI-Eigenschaft.
Derzeit bekomme ich eine exception (java.io.FileNotFoundException: comp\env\configLocation\app.properties (The system cannot find the path specified)
wenn der JNDI-Eigenschaft fehlt.
Wie kann ich festlegen, optional .properties
werden nur verwendet, wenn der JNDI-Eigenschaft (configLocation
) eingestellt ist? Ist das überhaupt möglich mit @PropertySource
oder gibt es eine andere Lösung?
InformationsquelleAutor Gerhard Schlager | 2013-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie die folgenden. Erstellen Sie eine
ApplicationContextInitializer
In einem Web-Kontext:
ApplicationContextInitializer<ConfigurableWebApplicationContext>
und registrieren Sie es in der web.xml über:In der ContextInitializer können Sie fügen Sie Ihre Immobilie Dateien über den classpath und die Datei system (habe nicht versucht, JNDI, obwohl).
Den code oben versucht zu finden, eine property-Datei, pro aktive Profil (siehe: How to set active spring 3.1-Umgebung Profil über eine Eigenschaften-Datei und nicht über eine env-variable oder Eigenschaft system)
ApplicationContextInitializer
. Wie es aussieht ist der einzig mögliche Weg, es zu tun.InformationsquelleAutor vivo
Als der Spring 4, Ausgabe SPR-8371 gelöst wurde. Folglich, die
@PropertySource
annotation hat ein neues Attribut namensignoreResourceNotFound
Hinzugefügt wurde genau für diesen Zweck. Darüber hinaus gibt es auch die neue @PropertySources annotation, die ermöglicht Implementierungen wie:@PropertySources
JavaDoc in Java 8, die Sie direkt umsetzen können mehrere@PropertySource
Anmerkungen zu einer Klasse ohne den wrapper.Ganz richtig ist. Ich schrieb ein blog post vor etwa einem Jahr über
@PropertySource
in dem ich auch erwähnt, Java 8 ist die Wiederholung von Anmerkungen.InformationsquelleAutor matsev
Wenn Sie noch nicht auf Frühling 4 (siehe matsev Lösung), hier ein Ausführlicher, aber in etwa gleichwertigen Lösung:
InformationsquelleAutor Koraktor