Spring Profiles ermöglichen die Definition und Verwaltung
unterschiedlicher Konfigurationen in einer Anwendung für verschiedene
Umgebungen, wie Entwicklung, Test und Produktion. Diese Flexibilität
wird erreicht durch das Ein- oder Ausschließen von spezifischen Beans,
Konfigurationseinstellungen und ganzen Konfigurationsdateien basierend
auf der aktiven Umgebung. Spring Profiles werden oft in Kombination mit
externen Konfigurationen wie application.properties oder
application.yml Dateien genutzt, um ein effizientes
Management von Umgebungskonfigurationen zu ermöglichen.
Der Einsatz von Spring Profiles zielt darauf ab, Konfigurationsdaten, die zwischen verschiedenen Umgebungen variieren, wie Datenbankverbindungen und externe Dienste, klar zu trennen. Dies verhindert, dass umgebungsspezifische Konfigurationen im Quellcode fest codiert werden müssen, verbessert dadurch die Wartbarkeit und minimiert das Risiko von Konfigurationsfehlern.
Profile können in den application.properties oder
application.yml Dateien mit dem Prefix
spring.profiles definiert werden. Zusätzlich ist es
möglich, spezifische Konfigurationsdateien für jedes Profil zu
erstellen, z.B. application-{profile}.properties oder
application-{profile}.yml.
Umgebungsvariablen: Setzen der
SPRING_PROFILES_ACTIVE Umgebungsvariable.
Anwendungsstart: Übergeben des
--spring.profiles.active=dev Parameters beim
Start.
CI/CD-Pipelines: Konfigurieren des aktiven Profils über Umgebungsvariablen im CI/CD-Tool.
Die @Profile-Annotation ermöglicht die Spezifizierung
von Beans, die nur unter bestimmten Profilen verfügbar sein sollen.
Beans, die mit einem nicht aktiven Profil markiert sind, werden vom
Spring Container ignoriert.
Ein DatenService Interface mit zwei Implementierungen:
EntwicklungsDatenService für die Entwicklung und
ProduktionsDatenService für die Produktion. Abhängig vom
aktiven Profil (dev oder prod) wird nur eine
der Implementierungen in den Spring Application Context aufgenommen.
Die @Profile-Annotation kann ebenfalls in
Konfigurationsklassen verwendet werden, um ganze Bean-Definitionen unter
bestimmten Profilbedingungen zu aktivieren oder deaktivieren.
@Configuration
@Profile("test")
public class TestKonfiguration {
@Bean
public DatenService testDatenService() {
return new TestDatenService();
}
}In diesem Fall wird TestDatenService nur instanziiert,
wenn das test Profil aktiv ist.
Die Fähigkeit, Beans basierend auf dem aktiven Profil zu definieren und zu injizieren, verschafft Entwicklern eine enorme Flexibilität. Es ermöglicht das Vorsehen unterschiedlicher Konfigurationen und Implementierungen für verschiedene Entwicklungsphasen, ohne den Code ändern oder multiple Konfigurationsdateien pflegen zu müssen. Dies vereinfacht den Entwicklungs-, Test- und Deployment-Prozess erheblich.
Das Diagramm veranschaulicht, wie durch die Verwendung von
@Profile Beans spezifischen Profilen zugewiesen werden
können, was eine gezielte Aktivierung basierend auf der aktuellen
Umgebung ermöglicht.
Spring Boot erlaubt die Erstellung von Konfigurationsdateien für
spezifische Profile, die durch den Profilnamen im Dateinamen
gekennzeichnet sind (z.B.
application-{profile}.properties). Bei Aktivierung eines
Profils werden die Einstellungen aus der entsprechenden Datei geladen
und haben Vorrang vor den Standardkonfigurationen in
application.properties oder
application.yml.
application-dev.propertiesserver.port=8081
spring.datasource.url=jdbc:h2:mem:testdb
Diese spezifischen Konfigurationen für das Entwicklungsprofil
(dev) ermöglichen eine einfache Anpassung an die jeweilige
Umgebung, ohne dass Änderungen am Code erforderlich sind.