© Excellent backgrounds/Shutterstock.com
Java Magazin
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.

Thorben Janssen, Anatole Tresch


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 PropertiesApache Commons ConfigurationApache DeltaSpikeSpringConfigBuilderOwnerJava 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 1db.port: 5432db.host: 127.0.0.1db.user: admindb.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 2Properties 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 erfolgt nicht typisiert. Die Methode getProperty(String key) gibt ein Objekt vom Typ String zurück, das anschließend, wie beim Parameter db.port zu sehen, programmatisch in den Zieltyp umgewandelt werden muss. Wie bei den Parametern db.port und db.host zu sehen, besteht die Möglichkeit, einen Standardwert anzugeben. Dieser wird verwendet, wenn die...

Java Magazin
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.

Thorben Janssen, Anatole Tresch


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 PropertiesApache Commons ConfigurationApache DeltaSpikeSpringConfigBuilderOwnerJava 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 1db.port: 5432db.host: 127.0.0.1db.user: admindb.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 2Properties 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 erfolgt nicht typisiert. Die Methode getProperty(String key) gibt ein Objekt vom Typ String zurück, das anschließend, wie beim Parameter db.port zu sehen, programmatisch in den Zieltyp umgewandelt werden muss. Wie bei den Parametern db.port und db.host zu sehen, besteht die Möglichkeit, einen Standardwert anzugeben. Dieser wird verwendet, wenn die...

Neugierig geworden?


    
Loading...

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