Modul 21 · Migration Deep Dive · Stufe 1 Fundament

Maven Properties und Konfiguration

String-Properties und Build-Filterung wird nachvollziehbar in typisierte Konfiguration mit Validierung überführt. Die Akte zeigt nicht nur das Ziel, sondern die tatsächlichen Dateien, APIs, Dependencies, Codebelege, Tests, Risiken und Cutover-Schritte.

Configuration ObjectFactory
1 → 2Produktionsdateien
20 → 22Java-Zeilen
1 → 1Testdateien
0 / 0Dependencies entfernt / neu
NIEDRIGRisiko · Score 1

Was sich konkret ändert

DimensionLegacyModernMigrationskonsequenz
Programmiermodellimperativ / ohne Framework-Annotationenexplizite Java-AbstraktionenAnnotationen und Containerfunktionen werden nur dort eingesetzt, wo sie eine konkrete technische Verantwortung übernehmen.
Abhängigkeiten1 direkte Dependencies1 direkte Dependencies0 neu, 0 entfernt; Versionen und transitive Auswirkungen im erfolgreichen Online-Build prüfen.
Öffentliche API2 erkannte Methoden1 erkannte MethodenMethoden werden nach fachlicher Rolle gemappt; reine Bootstrap- und Framework-Methoden sind kein fachlicher Vertrag.
Datenmodellclass LegacyPropertiesConfigclass ConfigFactory, record ApplicationConfigFeldnamen, IDs, Null-Semantik, Gleichheit und Serialisierungsform werden separat regressionstestet.
FehlerverhaltenLegacy-Exceptions und Rückgabewerteexplizitere Fach-/Framework-FehlerabbildungFehler dürfen nicht nur technisch übersetzt werden; Status, Ursache, Retrybarkeit und Client-Vertrag müssen erhalten oder versioniert werden.
TestsBestands- und Golden-Master-TestsUnit-, Slice-, Contract- und IntegrationstestsDer Modern-Pfad wird zuerst gegen denselben fachlichen Vektor geprüft und danach um neue technische Risiken ergänzt.
BetriebLegacy-Start/Lifecyclemodernes Packaging, Health und externe KonfigurationClean Build in CI, reproduzierbare Artefakte und Umgebungsmatrix prüfen.
RollbackLegacy-Artefakt bleibt unverändertModern-Artefakt getrennt deploybarKein Rollback über Datenverlust: Schema, Nachrichten und verschlüsselte Daten müssen rückwärtslesbar oder durch Dual-Read abgesichert sein.

Fachlicher Vertrag: unverändert zu erhalten

  • Konfigurationspriorität und Defaults sind dokumentiert.
  • Pflichtwerte werden früh validiert.
  • Secrets gelangen nicht in Build-Artefakte oder Logs.

Hauptrisiko und Testfokus

missing keys, precedence and environment drift

default, override, malformed and encoding tests

Die Modernisierung gilt erst als abgeschlossen, wenn der fachliche Vertrag automatisiert belegt ist.

Verbindliches Code- und Rollenmapping

Die Zuordnung ist semantisch: Eine Legacy-Klasse kann in mehrere moderne Rollen zerlegt werden.

Legacy-Rolle / DateiModern-Rolle / DateiBedeutung
LegacyPropertiesConfig.javaApplicationConfig.java + ConfigFactory.javaString-Properties werden validiertes Konfigurationsobjekt.

Legacy-Quellinventar

DateiTypAnnotationenöffentliche APIPatternZeilen
LegacyPropertiesConfig.javaclass LegacyPropertiesConfigString get(String key)
int getInt(String key)
Configuration Object – bündelt untypisierte Properties in einem Zugriffspunkt.20

Modern-Quellinventar

DateiTypAnnotationenöffentliche APIPatternZeilen
ApplicationConfig.javarecord ApplicationConfigConfiguration Object9
ConfigFactory.javaclass ConfigFactoryApplicationConfig from(Properties p, Map<String, String> env)Factory13

Dependency- und Laufzeitmigration

StatusDependencyVersionScopePrüfung
BEIBEHALTENorg.junit.jupiter:junit-jupiterBOM/Parent → BOM/Parenttest → testGemeinsame Dependency; Version und Scope im effektiven POM prüfen.
Direkte POM-Daten ersetzen keinen erfolgreichen Online-Build mit transitiver SBOM- und CVE-Prüfung.

Vorher-/Nachher-Codebelege

Die folgenden Ausschnitte stammen direkt aus den enthaltenen Projekten. Dadurch ist sichtbar, welche Verantwortung tatsächlich verschoben wurde.

Legacy
LegacyPropertiesConfig.java
Modern
ApplicationConfig.java + ConfigFactory.java

Migrationsbedeutung: String-Properties werden validiertes Konfigurationsobjekt.

Legacy-Code

projects/21-maven-properties-config/legacy/src/main/java/at/aydin/lab/config/legacy/LegacyPropertiesConfig.java

package at.aydin.lab.config.legacy;

// Design Pattern: Configuration Object – bündelt untypisierte Properties in einem Zugriffspunkt.
import java.io.*;
import java.util.*;

public final class LegacyPropertiesConfig {
    private final Properties properties = new Properties();
    public LegacyPropertiesConfig(InputStream in) throws IOException {
        properties.load(in);
    }

    public String get(String key) {
        return properties.getProperty(key);
    }

    public int getInt(String key) {
        return Integer.parseInt(get(key));
    }
}

Modern-Code

projects/21-maven-properties-config/modern/src/main/java/at/aydin/lab/config/modern/ApplicationConfig.java

package at.aydin.lab.config.modern;

// Design Pattern: Configuration Object
// Zweck: Zusammengehörige Einstellungen werden typisiert und validiert gebündelt.
public record ApplicationConfig(int serverPort, boolean featureEnabled) {
    public ApplicationConfig {
        if (serverPort < 1 || serverPort > 65535) throw new IllegalArgumentException("serverPort");
    }
}

Modern-Code

projects/21-maven-properties-config/modern/src/main/java/at/aydin/lab/config/modern/ConfigFactory.java

package at.aydin.lab.config.modern;

import java.util.*;

// Design Pattern: Factory
// Zweck: Zentralisiert Priorität, Parsing und Validierung verschiedener Konfigurationsquellen.
public final class ConfigFactory {
    public ApplicationConfig from(Properties p, Map<String, String> env) {
        int port = Integer.parseInt(env.getOrDefault("APP_PORT", p.getProperty("server.port", "8080")));
        boolean enabled = Boolean.parseBoolean(env.getOrDefault("FEATURE_ENABLED", p.getProperty("feature.enabled", "false")));
        return new ApplicationConfig(port, enabled);
    }
}

Umsetzungsplan mit Qualitäts-Gates

  1. Arbeitspaket 1
    Alle Property-Quellen und Überschreibungsregeln inventarisieren. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  2. Arbeitspaket 2
    ApplicationConfig als typisiertes unveränderliches Objekt definieren. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  3. Arbeitspaket 3
    ConfigFactory für Parsing, Defaulting und Validierung einsetzen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  4. Arbeitspaket 4
    Build-Time-Filtering von Runtime-Konfiguration trennen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  5. Arbeitspaket 5
    Malformed-, Encoding- und fehlende Werte testen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  6. Arbeitspaket 6
    Direkte Properties-Zugriffe schrittweise entfernen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.

Konkreter Test- und Abnahmekatalog

IDEbenePrüfungerforderlicher Nachweis
21-MAVEN-PROPERTIES-CONFIG-A01Integration/ContractFehlende Pflichtwerte stoppen den Start verständlich.Automatisierter Test und CI-Protokoll
21-MAVEN-PROPERTIES-CONFIG-A02Integration/ContractDefault und Override folgen dokumentierter Priorität.Automatisierter Test und CI-Protokoll
21-MAVEN-PROPERTIES-CONFIG-A03Integration/ContractUngültige Zahlen/Enums werden nicht still akzeptiert.Automatisierter Test und CI-Protokoll
21-MAVEN-PROPERTIES-CONFIG-A04Integration/ContractKeine Secrets in gefilterten Ressourcen.Automatisierter Test und CI-Protokoll
21-MAVEN-PROPERTIES-CONFIG-A05Integration/ContractKonfiguration ist in Unit-Tests ohne Maven reproduzierbar.Automatisierter Test und CI-Protokoll
21-MAVEN-PROPERTIES-CONFIG-T01UnitFachlogik ohne Container oder externen Dienst testen.Unit-Test
21-MAVEN-PROPERTIES-CONFIG-T02RegressionLegacy- und Modern-Ergebnis für denselben Golden-Master-Vektor vergleichen.Vergleichsreport
21-MAVEN-PROPERTIES-CONFIG-T03NegativeFehlerhafte, leere und grenzwertige Eingaben prüfen.Negativtest
21-MAVEN-PROPERTIES-CONFIG-T04OperationsStart, Health, Shutdown und Konfigurationsfehler prüfen.Deployment-/Startprotokoll
21-MAVEN-PROPERTIES-CONFIG-F01Fokusdefault, override, malformed and encoding testsModulspezifischer Testreport

Risikoregister des Moduls

RisikoAuswirkungGegenmaßnahmeGate
missing keys, precedence and environment driftNIEDRIGdefault, override, malformed and encoding testsvor Cutover

Rollback und Koexistenz

ConfigFactory kann vorübergehend aus dem bisherigen Properties-Objekt lesen; Aufrufer sehen bereits nur ApplicationConfig.

Abbruchkriterien

  • Fachlicher Golden-Master weicht ab.
  • Daten-, Nachrichten- oder API-Kompatibilität ist ungeklärt.
  • Fehlerquote, Latenz oder Ressourcenverbrauch überschreiten das vereinbarte Limit.
  • Monitoring oder Rückfallpfad ist nicht funktionsfähig.

Definition of Done

Direkte Arbeitslinks

⌂ Cockpit