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

Spring Boot应用中spring.profiles.active无法生效的原因排查

spring.profiles.active无法被Spring环境识别的原因及解决方法

原因分析

  • 打包工具不匹配Spring Boot启动逻辑:你使用的maven-assembly-plugin仅简单合并所有依赖与类到Jar包中,未集成Spring Boot专属的启动器(Launcher)。Spring Boot的配置加载、环境初始化等流程依赖官方启动器来触发,普通Jar打包方式无法完成这些逻辑,导致Spring环境无法正确读取spring.profiles.active系统属性。
  • 启动类调用错误:主类MainClass标记了@SpringBootApplication注解,是Spring Boot的入口配置类,但你在main方法中调用SpringApplication.run(AcctrvDataProcessor.class, args)启动了非配置类。若AcctrvDataProcessor无Spring配置类注解,Spring Boot无法识别其为主配置类,自然无法加载指定的profile配置。

解决方法

1. 修正主类启动代码

将SpringApplication.run的参数改为当前主类MainClass.class,确保Spring Boot以正确的配置类启动:

@SpringBootApplication
@Slf4j
public class MainClass {
    public static void main(String... args) {
        log.info(System.getProperty("spring.profiles.active"));
        ApplicationContext ctx = SpringApplication.run(MainClass.class, args); // 修正此处参数
        log.info(Arrays.toString(ctx.getEnvironment().getActiveProfiles()));
        int exitCode = SpringApplication.exit(ctx);
        System.exit(exitCode);
    }
}

2. 替换为Spring Boot官方打包插件

移除maven-assembly-plugin配置,改用spring-boot-maven-plugin,它会生成符合Spring Boot规范的可执行Jar包,自动处理启动逻辑:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot.version}</version> <!-- 替换为你的Spring Boot版本 -->
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>MainClass</mainClass>
    </configuration>
</plugin>

3. 正确启动应用

打包完成后,使用标准Spring Boot启动命令运行:

java -Dlog4j.configuration=file:///log4j.properties -Dspring.profiles.active=local -jar ./target/app-1.0.0-SNAPSHOT.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:43:18