10 Spring Profiles

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.

10.1 Motivation

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.

10.2 Konfiguration und Aktivierung

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.

10.2.1 Aktivierungsmethoden:

10.3 @Profile-Annotation

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.

10.3.1 Anwendungsbeispiel:

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.

10.4 Profile in Konfigurationsklassen

Die @Profile-Annotation kann ebenfalls in Konfigurationsklassen verwendet werden, um ganze Bean-Definitionen unter bestimmten Profilbedingungen zu aktivieren oder deaktivieren.

10.4.1 Beispiel:

@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.

10.5 Entwicklungsvorteile

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.

10.6 Diagramm: Nutzung von Spring Profiles

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.

10.7 Profil-spezifische Konfigurationsdateien

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.

10.7.1 Beispiel: application-dev.properties

server.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.