Spring @PropertySource报错:无法找到application.properties文件求助
解决Spring 3.2.16中
application.properties找不到的问题 咱们一步步来排查这个FileNotFoundException问题,虽然你已经标记了Resources为资源根目录,但大概率是资源文件没被正确打包到classpath里,或者有一些Spring版本相关的小细节没注意到,下面是几个可能的排查方向:
1. 先确认资源文件的基础信息
- 检查
application.properties的位置和大小写:确保它确实在src/main/resources目录下,别把文件名写成Application.properties或者application.Properties——Windows系统不区分大小写,但如果后续部署到Linux/macOS环境,大小写错误会直接导致找不到文件。 - 查看IntelliJ的项目结构:打开
File → Project Structure → Modules → 你的模块 → Resources,确认src/main/resources被列为资源目录,且application.properties没有被排除在资源列表之外。
2. 检查构建工具的打包结果(关键!)
不管你用Maven还是Gradle,资源文件最终要被打包到classpath的根目录下才会被Spring找到,你可以这么做:
- Maven用户:执行
mvn clean compile命令,然后去项目的target/classes目录下看看,有没有application.properties文件。如果没有,说明Maven没有把资源文件复制过来,检查pom.xml里有没有修改默认的资源目录配置(默认是src/main/resources)。 - Gradle用户:执行
gradle clean build命令,然后查看build/classes/java/main目录,确认文件存在。如果没有,检查build.gradle的sourceSets配置,确保resources.srcDirs包含src/main/resources。 - 如果你是直接用IntelliJ的Run按钮运行,也可以去
out/production/resources目录下检查文件是否存在。
3. 注意Spring 3.2.x版本的@PropertySource特性限制
Spring 3.2.16的@PropertySource有个小局限:它不支持用classpath*:通配符加载单个文件(这个特性在Spring 4.x之后才得到完善),所以你之前试的classpath*:application.properties这种写法是无效的,回到最基础的配置就好:
@PropertySource(value = "classpath:application.properties")
4. 清理IntelliJ的缓存
有时候IDE的缓存会导致资源文件没有被同步到构建目录,试试这个操作:File → Invalidate Caches... → 选择Invalidate and Restart,重启后重新构建项目,再运行试试。
5. 临时排查:用绝对路径测试
如果上面的方法都没解决,你可以先试试用本地绝对路径加载文件,比如:
@PropertySource(value = "file:/Users/yourname/project/src/main/resources/application.properties")
如果这样能正常加载,说明问题肯定出在classpath的打包环节,而不是代码配置的问题,再回头重点排查构建工具的配置。
内容的提问来源于stack exchange,提问作者Andrii Vdovychenko
相关产品推荐
相关产品推荐

