spring boot 3.4中环境变量按propertysource优先级链生效(命令行>环境变量>application.yml),支持热加载;安全注入敏感信息有三路径:系统环境变量、docker环境注入、k8s secret挂载;加密配置需引入jasypt并校验密钥加载与解密结果。

理解Starter中环境变量注入的底层机制
Spring Boot 3.4版本的Starter依赖自动配置时,环境变量不是简单地覆盖application.yml中的值,而是参与完整的PropertySource优先级链——命令行参数 > 环境变量 > application.yml > @PropertySource注解文件。这意味着你用export SPRING_DATASOURCE_PASSWORD=xxx设置的变量,会直接压在配置栈顶端,无需重启应用即可生效。
但注意:如果同时存在命令行参数--spring.datasource.password=abc和环境变量SPRING_DATASOURCE_PASSWORD=def,3.4版本会以命令行参数为准,这是与2.x版本的关键差异。
安全注入敏感信息的三种实操路径
方法一:通过系统环境变量注入(推荐用于开发/测试)
在终端执行:export DB_SECRET_KEY="a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" → 启动应用时,【该变量必须在java -jar命令执行前已存在,且不能写在后台脚本里被子shell隔离】
方法二:Docker容器内注入(生产环境标准做法)
在docker-compose.yml中添加:environment: - DB_SECRET_KEY=${DB_SECRET_KEY} → 启动前在宿主机执行export DB_SECRET_KEY=$(openssl rand -hex 32) → 【务必确保宿主机的.env文件未提交到Git,且权限为600】
方法三:Kubernetes Secret挂载(云原生场景)
先创建Secret:kubectl create secret generic db-creds --from-literal=db-secret-key=$(openssl rand -hex 32) → 在Deployment中volumeMounts挂载到容器内指定路径 → 应用通过FileReader读取该文件内容作为密钥。
加密配置项的强制校验流程
第一步:在application.yml中声明加密字段spring: datasource: password: ENC(AES:U2FsdGVkX1+...)
第二步:确认项目已引入jasypt-spring-boot-starter依赖,且版本兼容3.4(建议3.0.5+)
第三步:启动时检查日志是否出现JasyptEncryptorConfiguration: found property 'jasypt.encryptor.password' from environment,若无此行,说明密钥未被正确加载,应用将抛出IllegalArgumentException
第四步:验证解密结果是否生效——连接数据库时若报错“Access denied for user”,说明密文或密钥不匹配,需重新生成密文并核对密钥字符串是否含不可见空格











