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 ...
Antworten:
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.
quelle
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:
quelle
Hier sind verschiedene Optionen:
Vielleicht möchten Sie den Vergleich der Commons-Konfiguration mit JFig und JConfig lesen und Ihre Anwendungen mit JFig konfigurieren, um Feedback von verschiedenen Benutzern zu erhalten.
Persönlich habe ich jConfig verwendet und es war eine gute Erfahrung.
quelle
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.
quelle
Wenn Sie etwas Fortgeschrittenes (und typsicheres) tun möchten, sollten Sie sich Folgendes ansehen: http://www.ibm.com/developerworks/java/library/j-configint/index.html
quelle
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 .
quelle
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 .
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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
Sie können sich die neu angekündigte tools4j-config ansehen, deren Leitbild darin besteht, die Konfiguration zur Laufzeit einfach durchzuführen .
quelle