Java-Konfigurationsframework [geschlossen]

75

Ich bin dabei, alle fest codierten Werte in einer Java-Bibliothek auszusortieren, und habe mich gefragt, welches Framework für die Laufzeitkonfiguration am besten geeignet ist (in Bezug auf die Null- oder Null-Konfiguration). Ich würde XML-basierte Konfigurationsdateien bevorzugen, aber das ist nicht unbedingt erforderlich.

Bitte antworten Sie nur, wenn Sie praktische Erfahrung mit einem Framework haben. Ich suche keine Beispiele, sondern Erfahrung ...

Steen
quelle
In der Vergangenheit hatte ich auch damit zu kämpfen und mich schließlich auf java.utils.Properties, die Apache Commons-Konfiguration, Google Guava und Maven gestützt, um eine Konfigurationslösung nahe Null zu erstellen, die wir tatsächlich für alte Systeme konfigurieren, aber nur verwenden der Box für neue. Letzte Iteration auf Maven Central: github.com/sofdes/config-generation-maven-plugin
user1016765

Antworten:

29

Wenn Ihre fest codierten Werte nur einfache Schlüssel-Wert-Paare sind, sollten Sie sich java.util.Properties ansehen . Es ist viel einfacher als XML, einfacher zu bedienen und unglaublich trivial zu implementieren.

Wenn Sie mit Java arbeiten und die Daten, die Sie speichern oder von der Festplatte abrufen, als Schlüsselwertpaar modelliert werden (wie es sich in Ihrem Fall anhört), kann ich mir wirklich keine bessere Lösung vorstellen.

Ich habe Eigenschaftendateien für die einfache Konfiguration kleiner Pakete in einem größeren Projekt und als globalere Konfiguration für ein ganzes Projekt verwendet und hatte nie Probleme damit.

Dies hat natürlich den großen Vorteil, dass keine Bibliotheken von Drittanbietern verwendet werden müssen.

Mike Stone
quelle
2
Während Eigenschaften, wie Sie sagten, größtenteils einfach sind, ist das Laden weniger. Schauen Sie sich javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html an
James McMahon
4
+1 Für Eigenschaften, wenn Sie nur Schlüssel / Wert-Paare benötigen. Sobald Sie Listen oder Karten benötigen, ist es Zeit, zu einer anderen Lösung zu wechseln.
NateS
Ich bevorzuge die Antwort von @ John - selbst wenn Sie Eigenschaften verwenden, ist es wichtig, ein Framework zu haben, damit Sie später die zugrunde liegende Implementierung wechseln können, ohne Ihren gesamten Code neu zu schreiben. stackoverflow.com/questions/25765/java-configuration-framework/…
ripper234
42

Die Apache Commons-Konfiguration funktioniert hervorragend. Es unterstützt das Speichern der Konfiguration in einer Vielzahl von Formaten im Backend, einschließlich Eigenschaften, XML, JNDI und mehr. Es ist einfach zu bedienen und zu erweitern. Um die größtmögliche Flexibilität zu erzielen, verwenden Sie eine Factory , um die Konfiguration abzurufen, und verwenden Sie anschließend einfach die Konfigurationsoberfläche .

Zwei Merkmale der Commons-Konfiguration, die sie von einer reinen Eigenschaftendatei unterscheiden, sind die automatische Konvertierung in allgemeine Typen (int, float, String-Arrays) und die Ersetzung von Eigenschaften:

server.host=myHost
server.url=http://${server.host}/somePath
John Meagher
quelle
6

Commons-Konfiguration

Wir benutzen das. Eigenschaftendateien allein sind viel einfacher zu handhaben. Wenn Sie jedoch komplexere Data Commons-Konfigurationen darstellen müssen, können Sie dies tun und auch Ihre Eigenschaftendateien lesen.

Wenn Sie nichts Kompliziertes tun, würde ich mich an die richtigen Dateien halten.

ScArcher2
quelle
5

Mit dem Intelligent Parameter Utilization Tool (InPUT, Seite ) können Sie nahezu jede (fest codierte) Entscheidung als Parameter in eine XML-basierte Konfigurationsdatei auslagern. Es wurde Anfang 2012 als Reaktion auf die wahrgenommenen Mängel bei vorhandenen Konfigurationstools in Bezug auf die Allgemeinheit und die Trennung von Bedenken eingeleitet.

InPUT ist wahrscheinlich leistungsfähiger als es die meisten Anwendungsfälle erfordern, da es die programmiersprachenunabhängige Formulierung experimenteller Daten (Eingabe - Ausgabe) mit Funktionen wie der Definition komplexer Deskriptoren für Klassenzuordnungen oder dem Laichen und Validieren zufälliger Konfigurationen auf der Grundlage von ermöglicht vordefinierte Wertebereiche (für Test und Forschung, zB Monte-Carlo-Simulationen). Sie können Parameter mit Unterparametern, relativen Einschränkungen der Parameterwerte (numerischer Parameter a> Parameter b) usw. definieren.

Es befindet sich noch in der Beta-Phase, ist aber ziemlich stabil. Ich verwende es für meine Forschung, für die Konfiguration und Dokumentation von Experimenten und für Unterrichtszwecke . Sobald es für andere Sprachen verfügbar ist (C ++ - Adapter in der Pipe), können andere Forscher / Praktiker die Deskriptoren wiederverwenden, die ihre Implementierungen derselben Algorithmen in C ++ ausführen (unter Verwendung des Code-Mapping-Konzepts). Auf diese Weise können experimentelle Ergebnisse validiert / Programme einfacher migriert werden . Die Dokumentation ist noch in Arbeit, aber auf der Seite finden Sie einige Beispiele . InPUT ist Open Source Software.

Für Interessierte das Conceptual Research Paper .

Felix Dobslaw
quelle
3

Ich neige dazu, java.util.Properties(oder ähnliche Klassen in anderen Sprachen und Frameworks) die meiste Zeit in einer anwendungsspezifischen Konfigurationsklasse zu verwenden , bin aber sehr an Alternativen oder Variationen interessiert. Zumal es etwas schwierig werden kann, wenn grafische Konfigurationsdialoge oder mehrere Ansichten der Konfigurationsdaten beteiligt sind.

Leider habe ich keine Erfahrung mit bestimmten Bibliotheken für Java (außer mit denen, die ich selbst geschrieben habe), aber Hinweise wären willkommen.

Aktualisieren

IN ORDNUNG. Das stimmte nicht ganz, drei ist das Spring Java Configuration Project .

Anders Sandvig
quelle
2

Ich schrieb dies über ein paar Wochen vor und kam zu dem Schluss , dass XML eine der am häufigsten verwendeten Notationen ist.

Ist es das beste Ich glaube nicht, ich mag JSON wirklich, aber das Tooling ist immer noch nicht XML-fähig, also müssen wir wohl abwarten und sehen.

Dlinsin
quelle
1

Sie können YamlBeans ausprobieren . Auf diese Weise schreiben Sie alle Klassen, in denen Ihre Konfigurationsdaten gespeichert werden sollen, und können sie dann automatisch in und aus YAML schreiben und lesen.

YAML ist ein lesbares Datenformat. Es hat mehr Ausdruckskraft als java.util.Properties. Sie können Listen, Karten, Anker, eingegebene Daten usw. haben.

NateS
quelle
1

Bitte sehen Sie sich diese URL an: http://issues.apache.org/jira/browse/CONFIGURATION-394

Das von uns gesuchte Konfigurationsframework ist etwas, das über die Apache Commons-Konfiguration hinausgeht und Parallelitätsprobleme, JMX-Probleme und die meisten Speicher (z. B. Eigenschaftendatei, XML-Dateien oder PreferencesAPI) unterstützen muss.

Was das Weblogic-Team in der Administrationskonsole bereitstellt, ist das Interesse, über das Sie Transaktions- (Atom-) Updates für Konfigurationen erhalten können, damit registrierte Listener benachrichtigt werden.

Die Apache-Leute bestehen darauf, dass dieses Projekt möglicherweise nicht in den Bereich der Commons-Konfiguration fällt!

Ich habe ein einfaches Konfigurationsframework angehängt.

Javabegin
quelle
1

Ich habe gerade einen kurzen Code über die Verwendung von Spring's ClassPathResource als Alternative zu IoC veröffentlicht. Mit ClassPathResource können Sie Eigenschaftendateien an einer beliebigen Stelle im Klassenpfad platzieren (z. B. alle an einem Ort oder als Peers für den von ihnen konfigurierten Code. In meinem Beispiel wird nur java.util.Properties verwendet, sodass Sie den Klartextstil "name = value" verwenden können oder sein XML-Format.

Ichiro Furusato
quelle
0

Eigenschaften Dateien sehr einfach, wenn Sie etwas funktionaler benötigen, können Sie einige Ihrer Konfigurationsdateien als Java-Klassen formatieren. Diese können in einem anderen Paket / Modul abgelegt und zur Laufzeit mit einer Bibliothek wie BeanShell vorkompiliert oder geladen werden.

Hinweis: Im einfachsten Fall (vorkompiliert) benötigen Sie keine zusätzlichen Bibliotheken.

Peter Lawrey
quelle
0

In Bezug auf die Vorschläge zur Verwendung von java.util.Properties - ab jdk 1.5 - scheint die Voreinstellungs-API (java.util.prefs) die bevorzugte Alternative zur Verwendung der Eigenschaften-API zu sein.

Gründe: erhöhte Skalierbarkeit, Back-End-Neutralität, ect.


quelle
Ich habe die Einstellungen für eine Weile verwendet, aber es ist so ein Schmerz in Windows Vista, dass ich jetzt nach etwas anderem suche ...
dave4351
Die Preferences-API ist ziemlich eklig. Außerdem habe ich gesehen, dass es unter Linux aufgrund einiger Berechtigungsprobleme vollständig fehlschlägt. Außerdem können die Einstellungen die Eigenschaften nicht ersetzen, da die Konfiguration an einen zentralen Ort verschoben wird. Dies wirkt sich auf Sie aus, wenn mehr als eine Instanz Ihres Programms auf demselben Computer ausgeführt werden soll. Beispielsweise sind Einstellungen kein guter Ort zum Speichern der Konfiguration für eine WAR.
NateS
0

Sie können sich die neu angekündigte tools4j-config ansehen, deren Leitbild darin besteht, die Konfiguration zur Laufzeit einfach durchzuführen .

Kristian
quelle