Zum Hauptinhalt springen

Properties ↔ YAML Converter

Ein Tool zur Konvertierung von Spring Boot's application.properties und application.yml Dateien. Unverzichtbar für die Migration und Refaktorierung von Konfigurationsdateien!

📄 Properties → YAML

Output will appear here...

💡 Spring Boot Configuration Tips

Properties 장점:
  • 간단하고 직관적
  • 한 줄에 하나의 설정
  • 검색하기 쉬움
YAML 장점:
  • 계층 구조가 명확
  • 중복 줄임
  • 가독성 좋음
주의사항:
  • YAML은 들여쓰기에 민감 (스페이스만 사용)
  • Properties는 특수문자 이스케이프 필요
  • Profile별 파일 분리 권장

Properties vs YAML

Properties-Format

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
server.port=8080

YAML-Format

spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
server:
port: 8080

Wann verwenden?

Properties → YAML Konvertierung

  • Bei der Migration von Projekten zu YAML
  • Wenn Sie die hierarchische Struktur klar sehen möchten
  • Wenn Sie doppelte Präfixe reduzieren möchten
  • Wenn Sie die Lesbarkeit verbessern möchten

YAML → Properties Konvertierung

  • Kompatibilität mit Legacy-Systemen
  • Präferenz für einfache Konfiguration
  • Einfacheres Suchen und Greppen
  • Bessere IDE-Autovervollständigung

Praxisbeispiele

Datenbankkonfiguration

Properties:

# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

YAML:

# Database Configuration
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret123
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true

Server & Logging-Konfiguration

Properties:

server.port=8080
server.servlet.context-path=/api
server.compression.enabled=true

logging.level.root=INFO
logging.level.com.example=DEBUG
logging.file.name=logs/application.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

YAML:

server:
port: 8080
servlet:
context-path: /api
compression:
enabled: true

logging:
level:
root: INFO
com.example: DEBUG
file:
name: logs/application.log
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n'

Komplexe Properties

Properties:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

YAML:

spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

Properties vs YAML Vergleich

✅ Properties Vorteile

  1. Einfachheit: Eine Einstellung pro Zeile
  2. Einfache Suche: Leicht mit grep zu finden
  3. Vertrautheit: Alter Java-Standard
  4. Sonderzeichen: Einfach zu maskieren

✅ YAML Vorteile

  1. Lesbarkeit: Klare hierarchische Struktur
  2. Duplikate vermeiden: Gemeinsame Präfixe weggelassen
  3. Kommentare: Flexiblere Kommentare
  4. Listen: Kann Arrays ausdrücken

⚠️ Properties Nachteile

  • Viele Duplikate
  • Schwierig, hierarchische Struktur zu verstehen
  • Komplexe Konfigurationen werden lang

⚠️ YAML Nachteile

  • Empfindlich bei Einrückungen
  • Keine Tabs erlaubt (nur Leerzeichen)
  • Schwierig, Parsing-Fehler zu debuggen

Unterschiede in Spring Boot

Profil-Verwendung

Properties:

# application.properties (gemeinsam)
app.name=MyApp

# application-dev.properties (Entwicklung)
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db

# application-prod.properties (Produktion)
spring.datasource.url=jdbc:mysql://prod-server:3306/prod_db

YAML (Profiltrennung in einer Datei):

app:
name: MyApp

---
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:mysql://localhost:3306/dev_db

---
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://prod-server:3306/prod_db

Listen/Array-Darstellung

Properties (mit Index):

app.servers[0]=server1.example.com
app.servers[1]=server2.example.com
app.servers[2]=server3.example.com

YAML (natives Array):

app:
servers:
- server1.example.com
- server2.example.com
- server3.example.com

Map-Struktur

Properties:

app.config.key1=value1
app.config.key2=value2
app.config.key3=value3

YAML:

app:
config:
key1: value1
key2: value2
key3: value3

Verwendungstipps

1. Schrittweise Migration

# 1. Vorhandene Properties sichern
cp application.properties application.properties.bak

# 2. In YAML konvertieren
# (Dieses Tool verwenden)

# 3. application.yml erstellen

# 4. Properties nach dem Testen löschen

2. Profiltrennung

# application.yml (nur gemeinsame Einstellungen)
app:
name: MyApp

# application-dev.yml (Entwicklungsumgebung)
# application-prod.yml (Produktionsumgebung)

3. Umgebungsvariablen für sensible Informationen

spring:
datasource:
password: ${DB_PASSWORD} # Umgebungsvariable verwenden

4. IDE-Plugins nutzen

  • IntelliJ IDEA: Spring Boot-Unterstützung
  • VS Code: Spring Boot Extension Pack
  • Autovervollständigungs- und Validierungsfunktionen nutzen

Vorsichtsmaßnahmen

Beim Schreiben von YAML

# ❌ Falsches Beispiel (Tab verwenden)
spring:
datasource: # Tab verwenden - Fehler!

# ✅ Korrektes Beispiel (Leerzeichen verwenden)
spring:
datasource: # 2 Leerzeichen

Behandlung von Sonderzeichen

Properties:

# Sonderzeichen mit Backslash maskieren
app.message=Hello\nWorld
app.path=C:\\Users\\Example

YAML:

# Mit Anführungszeichen umschließen
app:
message: "Hello\nWorld"
path: "C:\\Users\\Example"

Zahlen und Boolesche Werte

Properties:

server.port=8080
app.enabled=true

YAML (automatische Typkonvertierung):

server:
port: 8080 # Als Zahl erkannt
port: "8080" # Als String beibehalten
app:
enabled: true # boolean
enabled: "true" # String

Fehlerbehebung

Fehler nach der Konvertierung

  1. YAML-Einrückung überprüfen

    • 2 Leerzeichen verwenden
    • Auf Tab-Zeichen prüfen
  2. Sonderzeichen überprüfen

    • :, #, @, usw. mit Anführungszeichen umschließen
  3. Typen überprüfen

    • Überprüfen, ob Zahlen und Boolesche Werte wie beabsichtigt konvertiert wurden
  4. Profilkonfiguration überprüfen

    • spring.profiles.active Konfiguration

Verwandte Tools

Zusätzliche Ressourcen

Best Practices

1. Nach Umgebung trennen

application.yml          # Gemeinsame Einstellungen
application-dev.yml # Entwicklungsumgebung
application-test.yml # Testumgebung
application-prod.yml # Produktionsumgebung

2. Sensible Informationen externalisieren

spring:
datasource:
password: ${DB_PASSWORD:defaultPassword}

3. Kommentare verwenden

# Database Configuration
# Separate Konfiguration in Produktionsumgebung erforderlich
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb

4. Konsistente Benennung

# Kebab-Case empfohlen
spring:
data-source: # ✅
driver-class-name: ...

# Camel-Case vermeiden
spring:
dataSource: # ❌
driverClassName: ...