Intellij中Spring Boot资源文件夹未放入war/war_exploded却在production目录原因?
问题原因
这个production文件夹是Spring Boot Gradle插件的Profile资源自动分类特性生成的:当你在构建配置中激活了名为production的环境profile时,插件会默认将对应profile的专属资源归档到BOOT-INF/classes/production/子目录下,而非直接放在类路径根目录。而Spring Boot默认只会从类路径根目录扫描application.properties配置文件,因此会出现配置读取失败、应用无法正常启动的问题。你也可以检查build.gradle中是否有自定义sourceSets配置强制将production设为独立资源目录,这种情况也会生成对应子目录。
解决方案
可根据实际使用场景选择以下任意一种方案:
- 方案1:禁用profile资源单独分组
在build.gradle中添加如下配置,让production目录下的所有资源直接输出到类路径根目录:processResources { duplicatesStrategy = DuplicatesStrategy.INCLUDE eachFile { file -> if (file.relativePath.segments[0] == 'production') { file.relativePath = file.relativePath.substring(1) } } } - 方案2:修改启动参数扩展配置扫描路径
启动应用时添加参数,让Spring Boot额外扫描production目录下的配置文件:java -jar 你的应用包名.jar --spring.config.location=classpath:/,classpath:/production/ - 方案3:遵循Spring Boot配置命名规范
不需要单独创建production子目录存放生产环境资源,所有配置直接放在src/main/resources根目录,将生产环境专属配置命名为application-production.properties即可。Spring Boot会自动根据激活的profile加载对应后缀的配置文件,不会出现路径识别问题。
内容的提问来源于stack exchange,提问作者Jinsol Lee
相关产品推荐
相关产品推荐

