Spring: Umgebungsspezifische Properties

Oft benötigen Spring-Beans Konfigurationswerte. Diese können durch Einbindung einer  speziellen Bean (z.B. PropertyPlaceHolderConfigurer) in Property-Dateien ausgelagert werden. In den Bean-Definitionen kann dann mit ${property-name} auf diese Properties zugegriffen werden.

Allerdings sind viele Properties (z.B. Datenbank- oder eMail-Konfiguration) in Projekten abhängig von der jeweiligen Umgebung (Entwicklung, Test, Produktion, …)

Eine Variante unterschiedlichen Umgebungen unterschiedliche Properties zur Verfügung zu stellen, ist die Verwendung unterschiedlicher Property-Dateien für unterschiedliche Umgebungen (z.B. durch ein ant-Skript). Jedoch ist das oftmals umständlich zu konfigurieren und durch die entstehende Redundanz fehleranfällig in der Wartung.

Eine meiner Meinung nach bessere Alternative ist die Properties mit einem umgebungsspezifischem Präfix zu erweitern:

dev.db.user=mysql
dev.db.password=mysql
prod.db.user=mysql
prod.db.password=gtrz56jioj

Damit das funktioniert muss eine spezielle 'propertyPlaceholder-Bean’ eingebunden werden.

<bean id="propertyPlaceholder class="de.thksystems.util.spring.EnvironmentPropertyPlaceholderConfigurer">
<property name="location" value="classpath:your.properties" />
</bean>

(Die Klasse EnvironmentPropertyPlaceholderConfigurer kann hier heruntergeladen werden und benötige neben einer Spring-Umgebung die Apache-Commons-Lang-Bibliothek.)

Über das VM-Kommandozeilenargument -DtargetEnvironment=XXX kann dann die aktuelle Umgebung gesetzt werden. (z.B. -DtargetEnvironment=dev)

Für den Fall, dass keine Umgebung gesetzt wird, ist es sinnvoll Default-Properties (ohne Prefix) zu haben, also z.B. so:

db.user=mysql
db.password=mysql
prod.db.password=gtrz56jioj

Sicherheitshinweis: Natürlich ist es unter bestimmten Bedingungen nicht sinnvoll allen Entwicklern Einblick in die Daten für bestimmte Umgebungen zu geben.


wallpaper-1019588
Wandern auf dem Jakobsweg: die Organisation ist entscheidend
wallpaper-1019588
[Review] Manga ~ Good Night Jack The Ripper
wallpaper-1019588
Asteroiden Kometen Meteoriten – alles Sternschnuppe?
wallpaper-1019588
Katzen-Ernährung: Alles, was Du wissen musst, um Deine Katze gesund zu ernähren