原因:java.io.FileNotFoundException:类路径资源[application.properties]无法打开,因为它不存在
Posted
技术标签:
【中文标题】原因:java.io.FileNotFoundException:类路径资源[application.properties]无法打开,因为它不存在【英文标题】:Caused by: java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist 【发布时间】:2019-09-05 08:05:50 【问题描述】:我正在创建一个 Spring Boot Batch 应用程序。该批次从 postgres 加载数据并插入 MongoDB。我已经编写了代码,但是在运行 spring boot 应用程序时,它显示错误 application.properties
文件未找到。以下是错误sn-ps:
'Caused by: java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist'
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.example.batch.SpringBatchExample]; nested exception is java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist
下面是application.properties
文件内容:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=Test_Data
#logging
logging.level.org.springframework.data=DEBUG
logging.level.=ERROR
logging.level.com.mastercard.refdata.*=DEBUG
#By default, Spring runs all the job as soon as it has started its context.
spring.batch.job.enabled=false
#Chunk Size to save data
spring.chunk.size=200
#Postgres DATASOURCE
spring.datasource.url=jdbc:postgresql://localhost:5432/Company-Test
spring.datasource.username=postgres
spring.datasource.password=test123
spring.datasource.driver-class-name=org.postgresql.Driver
请告诉我为什么会遇到这个问题??
【问题讨论】:
请张贴您编写的代码,或一个最小的、可验证的代码示例。另外,请格式化您的问题,使其更具可读性。 确保application.properties
文件在您的类路径中。如果你使用maven,应该在src/main/resources
目录下。
发布你的项目结构截图。
【参考方案1】:
将application.properties
文件移动到资源目录。
【讨论】:
【参考方案2】:检查您的 application.properties 文件是否在资源目录中,如下图所示:
如果您将您的 application.properties 保存到其他文件夹(例如 config),如下图所示,则按照以下代码配置您的 pom.xml:
<build>
<resources>
<resource>
<directory>config</directory>
<targetPath>$project.build.outputDirectory</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
【讨论】:
感谢您的提示。我已重命名属性文件,但忘记更改 pom 文件。你节省了我的时间;-)【参考方案3】:我的问题是一样的。您正在尝试连接项目中的多个数据库。
在主应用程序运行中有一个注释,如:
@PropertySources(@PropertySource("/../resources/datasource_cfg.properties"))
它是应用程序运行时要解析的路径。也许你的路径不正确。
【讨论】:
【参考方案4】:对于固定路径,您可以使用:
@PropertySource("file:$C:/Development/workspace/Projectname/resources//application.properties")
【讨论】:
【参考方案5】:Use this on configuration class
@Configuration
@PropertySource("classpath:application.properties")
(OR)
Use this in xml file
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>application.properties</value>
</list>
</property>
</bean>
【讨论】:
【参考方案6】:需要在Run Configuration的Bootstrap选项卡中配置config路径(projectBaseName\target\local\config),因为所有的properties文件都放在classpath下。
【讨论】:
【参考方案7】:将其标记为根资源。
这是在 intellij 中的操作方式:
【讨论】:
【参考方案8】:配置你的 pom.xml 文件添加资源;
<build>
<finalName>your-project-name</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
<exclude>**/*.class</exclude>
</excludes>
</resource>
</resources>
</build>
【讨论】:
【参考方案9】:对我来说,解决方案是将库(在我的情况下是我的主项目的依赖项)重新添加到我正在处理的主项目的程序集部署中。由于某种原因,Eclipse 无法在其类路径中检测到此项目。
https://i.stack.imgur.com/pyvTk.png
【讨论】:
【参考方案10】:而不是在@sqlgroup 使用的@sql 注释中使用classpath:filepath 文件:文件路径 它使 java 在整个文件夹中搜索类似路径的文件,对我来说就像一个魅力
【讨论】:
【参考方案11】:作为记录,当您在多个 IDE 中打开项目时也会发生这种情况。例如,Eclipse 无法识别其他 IDE 的配置文件。
如果在 Eclipse 中发生这种情况,我们可以做的是转到 project -> "clean..." 选项。这将清理构建文件并重新构建项目。
【讨论】:
【参考方案12】:我遇到了同样的问题,尽管所有配置都可以。很长一段时间后,我只是使用了 mvn clean package 命令,一切都很好。
【讨论】:
这也为我修复了它,而其他一切都没有! :)以上是关于原因:java.io.FileNotFoundException:类路径资源[application.properties]无法打开,因为它不存在的主要内容,如果未能解决你的问题,请参考以下文章