You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot yaml属性解析错误:Ubuntu环境下敏感字段加载为加密值

问题原因及解决方案

核心原因

该问题的本质是Spring Boot配置源优先级导致的yaml配置被覆盖,和系统环境、运行配置相关,Mac环境无对应覆盖项所以运行正常,常见触发场景如下:

  • Ubuntu系统或IDEA运行配置中存在DB_URL、DB_USERNAME、DB_PASSWORD环境变量:Spring Boot默认支持将大写+下划线分隔的环境变量自动映射为小驼峰/短横线分隔的配置项,优先级高于本地yaml文件,若这几个环境变量存储的是加密值就会直接覆盖你yaml里的明文配置
  • 多环境配置激活规则不一致:Ubuntu环境激活的配置文件(比如application-prod.yaml)里对应字段是加密值,和Mac激活的dev环境配置不同
  • 项目引入jasypt等配置加密组件时,两个环境的加密密钥配置不一致,且开启了解密失败不报错的配置,导致未正确解密拿到原始加密串

解决方案

按优先级排查即可:

  1. 先排查环境变量:
    • 在Ubuntu终端执行命令echo $DB_URL $DB_USERNAME $DB_PASSWORD,确认是否输出了你拿到的加密串,如果是删除对应系统环境变量即可
    • 打开IDEA的「Run/Debug Configurations」,找到你当前的Spring Boot启动项,查看「Environment variables」栏是否配置了上述三个变量,删除后重启项目
  2. 检查多环境激活配置:
    查看spring.profiles.active配置值,确认Ubuntu和Mac环境激活的配置文件是否一致,确保加载的是同一份yaml配置
  3. 排查加密组件配置:
    如果项目引入了jasypt-spring-boot-starter等加密依赖,确认Ubuntu环境的jasypt.encryptor.password密钥配置和Mac一致,同时关闭jasypt.encryptor.fail-on-error=false配置,解密失败时直接抛出异常便于定位问题
  4. 定位配置源:
    若上述步骤都未解决,可以在代码中注入org.springframework.core.env.Environment对象,遍历所有配置源定位db.url的取值来源:
    @Autowired
    private Environment env;
     
    // 项目启动后执行以下代码
    System.out.println(env.getProperty("db.url"));
    if (env instanceof StandardEnvironment standardEnv) {
        for (PropertySource<?> ps : standardEnv.getPropertySources()) {
            if (ps.containsProperty("db.url")) {
                System.out.println("配置来源:" + ps.getName());
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者Akhil Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:48:01