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
相关产品推荐
相关产品推荐

