开发避坑指南(18): SpringBoot环境变量配置错误:占位符解析失败解决方案
异常信息
Caused by: java.lang.IllegalArgumentException:
Could not resolve placeholder 'DB_PASSWORD' in value "${DB_PASSWORD}"
异常背景
idea中,springboot服务,application.properties 配置文件读取windows系统环境变量中的变量DB_PASSWORD。项目启动的时候报错。
异常分析
都说使用美元符加{}引用环境变量,那么为什么报错呢?${}在idea中为什么要通过配置Environment引用环境变量,而打成jar包后却可以直接引用环境变量呢?其根本原因是 IDEA开发环境与JAR包运行环境存在差异。
- IDEA的隔离性
IDEA通过独立的进程启动应用,默认不会传递宿主机的环境变量到JVM,需手动配置(如通过Edit Configurations → Environment variables)。 - JAR包的运行机制
直接通过java -jar启动时,JVM会自动加载系统的环境变量,SpringBoot会优先从这些变量中解析${}占位符。
解决办法
在idea 中的打开项目的Run/Debug Configurations,在Environment variables中配置DB_PASSWORD=ENC(xsFbhdgjGL+skLybbG86L)即可正常启动。