Properties ↔ YAML Converter
用于转换Spring Boot的application.properties和application.yml文件的工具。配置文件迁移和重构必备!
📄 Properties → YAML
Output will appear here...
💡 Spring Boot Configuration Tips
Properties 장점:
- 간단하고 직관적
- 한 줄에 하나의 설정
- 검색하기 쉬움
YAML 장점:
- 계층 구조가 명확
- 중복 줄임
- 가독성 좋음
주의사항:
- YAML은 들여쓰기에 민감 (스페이스만 사용)
- Properties는 특수문자 이스케이프 필요
- Profile별 파일 분리 권장
Properties vs YAML
Properties格式
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
server.port=8080
YAML格式
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
server:
port: 8080
何时使用?
Properties → YAML转换
- 将项目迁移到YAML时
- 想要清楚地看到层级结构时
- 想要减少重复前缀时
- 想要提高可读性时
YAML → Properties转换
- 与遗留系统的兼容性
- 偏好简单配置
- 更容易搜索和grep
- IDE自动补全效果更好
实际使用示例
数据库配置
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
服务器 & 日志配置
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'
复杂属性
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与YAML比较
✅ Properties优点
- 简单: 一行一个设置
- 易于搜索: 使用grep轻松查找
- 熟悉: 旧的Java标准
- 特殊字符: 易于转义
✅ YAML优点
- 可读性: 层级结构清晰
- 减少重复: 省略公共前缀
- 注释: 更灵活的注释
- 列表: 可以表达数组
⚠️ Properties缺点
- 重复较多
- 难以理解层级结构
- 复杂配置变得冗长
⚠️ YAML缺点
- 对缩进敏感
- 不能使用制表符(仅空格)
- 解析错误难以调试
在Spring Boot中的差异
配置文件使用
Properties:
# application.properties (公共)
app.name=MyApp
# application-dev.properties (开发)
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
# application-prod.properties (生产)
spring.datasource.url=jdbc:mysql://prod-server:3306/prod_db
YAML (在一个文件中区分配置文件):
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
列表/数组表达
Properties (使用索引):
app.servers[0]=server1.example.com
app.servers[1]=server2.example.com
app.servers[2]=server3.example.com
YAML (原生数组):
app:
servers:
- server1.example.com
- server2.example.com
- server3.example.com
Map结构
Properties:
app.config.key1=value1
app.config.key2=value2
app.config.key3=value3
YAML:
app:
config:
key1: value1
key2: value2
key3: value3
使用技巧
1. 渐进式迁移
# 1. 备份现有properties
cp application.properties application.properties.bak
# 2. 转换为YAML
# (使用此工具)
# 3. 创建application.yml
# 4. 测试后删除properties
2. 配置文件分离
# application.yml (仅公共设置)
app:
name: MyApp
# application-dev.yml (开发环境)
# application-prod.yml (生产环境)
3. 敏感信息使用环境变量
spring:
datasource:
password: ${DB_PASSWORD} # 使用环境变量
4. 利用IDE插件
- IntelliJ IDEA: Spring Boot支持
- VS Code: Spring Boot Extension Pack
- 利用自动补全和验证功能
注意事项
编写YAML时
# ❌ 错误示例 (使用制表符)
spring:
datasource: # 使用制表符 - 错误!
# ✅ 正确示例 (使用空格)
spring:
datasource: # 2个空格
特殊字符处理
Properties:
# 用反斜杠转义特殊字符
app.message=Hello\nWorld
app.path=C:\\Users\\Example
YAML:
# 用引号包裹
app:
message: "Hello\nWorld"
path: "C:\\Users\\Example"
数字和布尔值
Properties:
server.port=8080
app.enabled=true
YAML (自动类型转换):
server:
port: 8080 # 识别为数字
port: "8080" # 保持为字符串
app:
enabled: true # boolean
enabled: "true" # 字符串
故障排除
转换后出现错误
-
检查YAML缩进
- 使用2个空格
- 检查是否有制表符
-
检查特殊字符
- 用引号包裹
:,#,@等
- 用引号包裹
-
检查类型
- 验证数字和布尔值是否按预期转换
-
检查配置文件设置
spring.profiles.active配置
相关工具
- JSON Formatter - JSON格式化
- CSV JSON Converter - CSV-JSON转换
- Text Diff - 比较配置文件
附加资源
最佳实践
1. 按环境分离
application.yml # 公共设置
application-dev.yml # 开发环境
application-test.yml # 测试环境
application-prod.yml # 生产环境
2. 外部化敏感信息
spring:
datasource:
password: ${DB_PASSWORD:defaultPassword}
3. 使用注释
# Database Configuration
# 生产环境需要单独配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
4. 一致的命名
# 推荐kebab-case
spring:
data-source: # ✅
driver-class-name: ...
# 避免camelCase
spring:
dataSource: # ❌
driverClassName: ...