Spring Boot Maven插件addResources致.properties文件无法访问求助
解决Spring Boot开启
addResources=true后命令行启动无法访问.properties文件的问题 方案一:调整Spring Boot Maven插件的资源配置
在spring-boot-maven-plugin中明确指定要包含的资源类型,确保配置文件和模板文件都能被正确加载到类路径,同时保留addResources=true的热重载能力:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <addResources>true</addResources> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.properties</include> <include>**/*.yml</include> <include>**/*.html</include> <include>**/*.css</include> <include>**/*.js</include> </includes> </resource> </resources> </configuration> </plugin>
这个配置会强制插件将指定类型的资源从src/main/resources目录加入类路径,避免因资源优先级问题导致配置文件无法被读取。
方案二:改用Spring Boot DevTools实现热重载(推荐)
官方推荐的热重载方案,无需依赖addResources配置,还能覆盖更多场景(包括配置文件修改后的自动重启),彻底避免类路径资源冲突问题:
1. 添加DevTools依赖
在pom.xml中引入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
2. 配置DevTools和Thymeleaf
在application-dev.properties中添加以下配置:
# 开启自动重启 spring.devtools.restart.enabled=true # 指定需要监听热重载的目录(模板、静态资源) spring.devtools.restart.additional-paths=src/main/resources/templates,src/main/resources/static # 关闭Thymeleaf缓存,确保模板修改即时生效 spring.thymeleaf.cache=false
3. 命令行启动验证
执行mvn clean package spring-boot:run -P dev即可正常加载配置文件,同时修改Thymeleaf模板或静态资源后,应用会自动重启或刷新,实现热重载效果。
问题原因分析
开启addResources=true时,Maven会将src/main/resources下的资源直接挂载到类路径,而mvn clean package阶段会把资源打包到target/classes目录,两者同时存在于类路径时,可能出现资源加载顺序混乱、配置文件未被正确过滤(如dev环境的变量替换)等问题,导致应用无法读取到正确的.properties文件。DevTools通过类加载器隔离机制实现热重载,不会干扰资源的正常加载逻辑,因此是更可靠的方案。
内容的提问来源于stack exchange,提问作者Zdrzalik Przemyslaw
相关产品推荐
相关产品推荐

