Config externalize settings ra ngoài code — giá trị theo môi trường (DB URL, port, log level...) đổi mà không rebuild.
Hai format:
yaml
# application.yml — phân cấp, gọn cho nested config
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost/db(application.properties là dạng phẳng: server.port=8080, spring.datasource.url=....)
Đọc trong code: @Value("${server.port}") cho 1 property; @ConfigurationProperties(prefix = "app") bind cả nhóm property vào record/class (typed, khuyến nghị — xem câu @Value vs @ConfigurationProperties).
Profiles: application-{dev,prod}.yml, kích hoạt qua spring.profiles.active=prod → 1 JAR cho mọi env.
Thứ tự ưu tiên (cao→thấp): command-line args → env vars → application-{profile}.yml → application.yml. Secret không commit — dùng env var/Vault/Secrets Manager.