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

Spring Boot 2.5.6升级后spring.profiles.active占位符无法解析问题

排查方向
  • 编译后产物检查
    全局搜索默认仅扫描源码目录,首先到构建输出目录(target/classes、build/classes)下搜索所有.properties、.yml文件,确认是否有残留的${spring.profiles.active}占位符。若存在则检查pom.xml的<resources>过滤规则,是否有编译期占位符替换的异常配置。
  • Maven插件参数传递规则适配
    Spring Boot 2.4+ 对spring-boot-maven-plugin的参数传递逻辑做了调整,直接在命令后加-Dspring.profiles.active不会自动传递到应用进程,正确的启动命令写法为:
    mvn spring-boot:run -Dspring-boot.run.profiles=local -f pom.xml
    
    也可以在IntelliJ运行配置的「VM选项」栏单独添加-Dspring.profiles.active=local确保参数生效。
  • 外部配置源排查
    按Spring Boot配置优先级,排查以下优先级高于项目内配置的来源是否有异常:
    • IntelliJ运行配置的「环境变量」栏是否有隐性的旧配置
    • 操作系统的系统环境变量、用户环境变量是否有Spring相关的旧配置
    • 项目中是否配置了spring.config.import引入了外部配置文件,外部文件中可能存在旧占位符
  • 依赖包隐藏配置排查
    全局搜索默认不会扫描项目依赖的二方/三方包,可通过在启动类添加以下代码打印所有加载的配置源,定位带旧占位符的配置所在位置:
    @SpringBootApplication
    public class AppApplication {
        public static void main(String[] args) {
            ConfigurableApplicationContext context = SpringApplication.run(AppApplication.class, args);
            ConfigurableEnvironment env = context.getEnvironment();
            for (PropertySource<?> propertySource : env.getPropertySources()) {
                System.out.println("配置源名称:" + propertySource.getName());
            }
        }
    }
    
  • 自定义扩展类排查
    检查项目中是否存在自定义的ApplicationContextInitializer、EnvironmentPostProcessor、PropertySourceLoader实现类,这些类如果通过SPI机制注册,可能硬编码了对旧占位符的引用,不会被常规全局搜索命中。

补充纠正:config.activate.on-profile是2.4+版本用于单配置文件多文档块场景下,标记当前配置块生效的profile条件,不是替代spring.profiles.active的激活配置项,应用的profile激活配置仍然使用spring.profiles.active即可,无需替换原有激活配置。

内容的提问来源于stack exchange,提问作者Swan-Work

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:04