Saltar al contenido principal

Properties ↔ YAML Converter

Una herramienta para convertir archivos application.properties y application.yml de Spring Boot. ¡Esencial para la migración y refactorización de archivos de configuración!

📄 Properties → YAML

Output will appear here...

💡 Spring Boot Configuration Tips

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

Properties vs YAML

Formato Properties

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

Formato YAML

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

¿Cuándo usar?

Conversión Properties → YAML

  • Al migrar proyectos a YAML
  • Cuando quieres ver claramente la estructura jerárquica
  • Cuando quieres reducir prefijos duplicados
  • Cuando quieres mejorar la legibilidad

Conversión YAML → Properties

  • Compatibilidad con sistemas heredados
  • Preferencia por configuración simple
  • Búsqueda y grep más fáciles
  • Mejor autocompletado de IDE

Ejemplos prácticos

Configuración de base de datos

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

Configuración de servidor y registro

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'

Propiedades complejas

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

Comparación Properties vs YAML

✅ Ventajas de Properties

  1. Simplicidad: Una configuración por línea
  2. Búsqueda fácil: Fácil de encontrar con grep
  3. Familiaridad: Antiguo estándar de Java
  4. Caracteres especiales: Fácil de escapar

✅ Ventajas de YAML

  1. Legibilidad: Estructura jerárquica clara
  2. Reducir duplicación: Prefijos comunes omitidos
  3. Comentarios: Comentarios más flexibles
  4. Listas: Puede expresar arrays

⚠️ Desventajas de Properties

  • Mucha duplicación
  • Difícil de entender la estructura jerárquica
  • Las configuraciones complejas se vuelven largas

⚠️ Desventajas de YAML

  • Sensible a la indentación
  • No se pueden usar tabulaciones (solo espacios)
  • Difícil depurar errores de análisis

Diferencias en Spring Boot

Uso de perfiles

Properties:

# application.properties (común)
app.name=MyApp

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

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

YAML (separación de perfiles en un archivo):

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

Expresión de lista/array

Properties (usando índice):

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

YAML (array nativo):

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

Estructura Map

Properties:

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

YAML:

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

Consejos de uso

1. Migración gradual

# 1. Hacer copia de seguridad de properties existentes
cp application.properties application.properties.bak

# 2. Convertir a YAML
# (Usar esta herramienta)

# 3. Crear application.yml

# 4. Eliminar properties después de probar

2. Separación de perfiles

# application.yml (solo configuración común)
app:
name: MyApp

# application-dev.yml (entorno de desarrollo)
# application-prod.yml (entorno de producción)

3. Variables de entorno para información sensible

spring:
datasource:
password: ${DB_PASSWORD} # Usar variable de entorno

4. Utilizar plugins de IDE

  • IntelliJ IDEA: Soporte Spring Boot
  • VS Code: Spring Boot Extension Pack
  • Utilizar funciones de autocompletado y validación

Precauciones

Al escribir YAML

# ❌ Ejemplo incorrecto (usando tabulación)
spring:
datasource: # Usando tabulación - ¡Error!

# ✅ Ejemplo correcto (usando espacios)
spring:
datasource: # 2 espacios

Manejo de caracteres especiales

Properties:

# Escapar caracteres especiales con barra invertida
app.message=Hello\nWorld
app.path=C:\\Users\\Example

YAML:

# Envolver con comillas
app:
message: "Hello\nWorld"
path: "C:\\Users\\Example"

Números y booleanos

Properties:

server.port=8080
app.enabled=true

YAML (conversión automática de tipo):

server:
port: 8080 # Reconocido como número
port: "8080" # Mantener como cadena
app:
enabled: true # boolean
enabled: "true" # cadena

Solución de problemas

Errores después de la conversión

  1. Verificar indentación YAML

    • Usar 2 espacios
    • Verificar que no haya caracteres de tabulación
  2. Verificar caracteres especiales

    • Envolver :, #, @, etc. con comillas
  3. Verificar tipos

    • Verificar que números y booleanos se conviertan como se espera
  4. Verificar configuración de perfiles

    • Configuración spring.profiles.active

Herramientas relacionadas

Recursos adicionales

Mejores prácticas

1. Separar por entorno

application.yml          # Configuración común
application-dev.yml # Entorno de desarrollo
application-test.yml # Entorno de prueba
application-prod.yml # Entorno de producción

2. Externalizar información sensible

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

3. Usar comentarios

# Database Configuration
# Configuración separada necesaria en entorno de producción
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb

4. Nomenclatura consistente

# Kebab case recomendado
spring:
data-source: # ✅
driver-class-name: ...

# Evitar camel case
spring:
dataSource: # ❌
driverClassName: ...