wildfly: Lesen der Eigenschaften von directory-Konfiguration
Ich versuche zu Lesen, Bereitstellung spezifischer Informationen aus einer properties-Datei in meinem wildfly Ordner "configuration". Ich versuchte dies:
@Singleton
@Startup
public class DeploymentConfiguration {
protected Properties props;
@PostConstruct
public void readConfig() {
props = new Properties();
try {
props.load(getClass().getClassLoader().getResourceAsStream("my.properties"));
} catch (IOException e) {
//... whatever
}
}
Aber offensichtlich ist dies nicht funktioniert, da der Ordner "configuration" ist nicht im Klassenpfad mehr. Jetzt kann ich nicht finden eine einfache Möglichkeit, es zu tun. Mein Favorit wäre so etwas wie dieses:
@InjectProperties("my.properties")
protected Properties props;
Die einzige Lösung, die ich im Internet gefunden habe, so weit geht es darum, meine eigene OSGi-Modul, aber ich glaube, es muss einen einfacheren Weg, es zu tun (ohne OSGi!). Kann jemand mir zeigen, wie?
- Wenn die Datei in der WildFly Ordner "configuration", dann ist es global, und nicht die Bereitstellung bestimmter. Das ist ein bisschen verwirrend...
- vielleicht habe ich missbraucht den Begriff "Bereitstellung spezifischer". Die Datei ist in der wildfly/standalone/configuration Ordner.
- Wenn ich mich erinnere, klar, früher habe ich meine Konfigurationen in diesem Ordner, und ich einfach mit File("myfile.Eigenschaften") aufgelöst, auf diesem Weg (ich denke, das könnte die Arbeit dir für jboss)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie explizit zu Lesen einer Datei aus dem Konfigurationsverzeichnis (z.B.
$WILDFLY_HOME/standalone/configuration
oderdomain/configuration
) es gibt eine system property mit dem Pfad. EinfachSystem.getProperty("jboss.server.config.dir");
und hängen Sie Ihre Datei-Namen zu Datei zu erhalten.Würden Sie es nicht Lesen, als eine Ressource, aber so...
Dann würde die Datei geladen für Sie.
Auch, da WildFly nicht Schiff mit OSGi-Unterstützung mehr, ich weiß nicht, wie das erstellen eines OSGi-Modul würde hier helfen können.
Hier ist ein komplettes Beispiel, mit nur CDI, aus diesem Website.
Erstellen und Auffüllen einer properties-Datei innerhalb des WildFly-Konfiguration Ordner
Fügen Sie eine system-Eigenschaft auf die WildFly-Konfigurationsdatei.
Diese fügen den folgenden, um Ihre server-Konfigurationsdatei (standalone.xml oder domain.xml):
Erstellen, die die singleton session bean, lädt und speichert die Breite Anwendung Eigenschaften
Erstellen der CDI-Qualifier. Wir werden mit dieser annotation im Java-Variablen, die wir wünschen einzuspritzen.
Erstellen der producer-Methode; dies erzeugt das Objekt gespritzt werden
Schließlich Spritzen Sie die Immobilie in einen Ihrer CDI beans
Die einfachste Sache, die Sie tun können, ist laufen
standalone.sh
mit einem-P
option verweisen auf Ihre properties-Datei (Sie benötigen eine URLfile:/path/to/my.properties
oder legen Sie die Datei in$WILDFLY_HOME/bin
).Dann alle Eigenschaften aus der Datei geladen werden, die als system-Eigenschaften.
Zur Injektion von Konfigurationseigenschaften in Ihrer Anwendung Klassen, haben einen Blick auf DeltaSpike-Konfiguration, die unterstützt andere Eigenschaft Quellen wie Systemeigenschaften, Umgebungsvariablen, JNDI-Einträge und verbirgt die bestimmte Quelle, von Ihrer Anwendung aus.
Alternativ zu vermeiden, festlegen von Eigenschaften für system (die werden global in dem Sinne, dass sichtbar für alle Anwendungen bereitgestellt, um Ihre WildFly Beispiel), können Sie auch eine benutzerdefinierte Eigenschaft Quelle für DeltaSpike Lesen einer properties-Datei von jedem beliebigen Ort aus, und diese Eigenschaften werden lokal auf Ihre Bewerbung.
Es klingt wie das problem, das Sie versuchen zu lösen, ist die Verwaltung unterschiedlicher (aber vermutlich ähnlich) Konfigurationsdateien für die Ausführung Ihrer Anwendung in verschiedenen Umgebungen (ie, Produktion, QA, oder sogar verschiedene Kunden). Wenn das der Fall ist, werfen Sie einen Blick auf Jfig http://jfig.sourceforge.net/ . Es würde vermeiden die Notwendigkeit für die Speicherung von property-Dateien außerhalb der classpath - (aber Sie konnte noch immer).
Zu vermeiden, diese Art von problem, das Problem ist die Einstellung der
jboss.server.config.dir
im VM-Argumente wie :Wenn Sie in standalone.xml Eigenschaft:
können Sie wasily es Lesen mit:
Oder wenn Sie angeben, context-param in web.xml wie:
Können Sie Lesen es in der Java-bean: