© Excellent backgrounds/Shutterstock.com
Viele verschiedene Lösungen, aber kein Standard

Bestehende Konfigurationslösungen in Java


Konfiguration ist ein wichtiger Bestandteil moderner Anwendungen und erlaubt es, das Verhalten ohne Neubauen zu verändern. Wie vielfältig und unterschiedlich die dabei auftretenden Anforderungen sind, haben wir im vorherigen Teil dieser Reihe betrachtet. Diesmal wollen wir uns einige bestehende Lösungen ansehen.

Wie nicht anders zu erwarten, sind die bestehenden Konfigurationslösungen genauso vielfältig wie die an sie gestellten Anforderungen. Eine vollständige Betrachtung aller Lösungen ist aufgrund ihrer großen Anzahl leider nicht möglich. Daher haben wir eine Reihe verbreiteter Lösungen ausgewählt, um einen möglichst breiten Überblick über die unterschiedlichen Designansätze geben zu können. Dies sind:

  • Java Properties

  • Apache Commons Configuration

  • Apache DeltaSpike

  • Spring

  • ConfigBuilder

  • Owner

  • Java EE

Aus Platzgründen nicht berücksichtigt haben wir u. a. Netflix Archaia [1] und Akka Configuration [2], obwohl auch sie einige interessante Konzepte aufweisen. Mit jeder dieser Lösungen wollen wir versuchen, die config.properties-Datei aus Listing 1 einzulesen, die wir im Wurzelverzeichnis des Klassenpfads ablegen.

Listing 1

db.port: 5432 db.host: 127.0.0.1 db.user: admin db.pass: geheim

Wenn das verwendete Framework die Kombination verschiedener Konfigurationsquellen unterstützt, wird der Konfigurationsparameter db.pass mithilfe einer System-Property mit dem Wert my$ecret überschrieben.

Java-Properties

Mit der Properties-Klasse [3] bietet Java eine einfache Möglichkeit, um Konfigurationsdaten aus einer Properties-Datei zu lesen und auf diese in Form von Schlüssel-/Wert-Paaren zuzugreifen.

Listing 2

Properties prop = new Properties(); prop.load(new FileReader("config.properties")); int dbPort = Integer.parseInt(prop.getProperty("db.port", "5432")); String dbHost = prop.getProperty("db.host", "127.0.0.1"); String dbUser = prop.getProperty("db.user"); String dbPass = prop.getProperty("db.pass");

Wie Listing 2 zeigt, erfolgt das Lesen der Properties-Datei und der Zugriff auf die Konfigurationsparameter ausschließlich programmatisch. Annotationen können nicht verwendet werden.

Ein weiterer Nachteil dieses Ansatzes ist die geringe Anzahl unterstützter Konfigurationsquellen. Das API ist auf das Einlesen von genau einer Properties-Datei ausgelegt, und auch die Kombination verschiedener Konfigurationsquellen zu einer Konfiguration muss vom Entwickler selbst implementiert werden. Darauf haben wir in diesem Beispiel verzichtet.

Der Zugriff auf die Parameter er...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang