Spring找不到属性文件

时间:2018-12-09 21:41:17

标签: spring

我尝试了各种方法来查找文件,并始终遇到此异常:

  

java.io.FileNotFoundException:类路径资源[src / main / resources / sport.properties]无法打开,因为它不存在

这是我的文件夹结构:

folder structure

此字符串中的哪个路径正确? @PropertySource(“ classpath:/src/main/resources/sport.properties”)

2 个答案:

答案 0 :(得分:1)

  

此字符串中的哪个路径正确? @PropertySource("classpath:/src/main/resources/sport.properties")

那是不正确的,因为您要混淆两个“名称空间”。

  • 字符串"classpath:/src/main/resources/sport.properties"是URI。

  • "classpath"意味着您要告诉Spring查看应用程序的运行时类路径。

  • 但是"/src/main/resources/sport.properties"不是运行时类路径上的名称。而是它是文件系统中相对于Eclipse项目目录的路径名。

由于您将Maven与Eclipse一起使用,因此需要了解将资源树添加到类路径中。即"${MAVEN_PROJECT}/src/main/resources/a/b"在运行时类路径上变为"/a/b"

  • 构成应用程序的所有Maven项目的"${MAVEN_PROJECT}/src/main/resources"目录都以这种方式添加到类路径中。

  • 在进行单元测试时,还会在类路径中添加"${MAVEN_PROJECT}/src/test/resources"目录。


简而言之,您可能应该使用@PropertySource("classpath:/sport.properties")

答案 1 :(得分:0)

我建议如下所述使用TestPropertySource进行集成测试。

@RunWith(SpringRunner.class)
@ContextConfiguration(locations = "/applicationContext.xml")
@TestPropertySource(locations = "/sport.properties")
  

@TestPropertySource是一个类级别的注释,用于   配置属性文件的位置()和内联的属性()   要添加到环境的PropertySources集中   用于集成测试的ApplicationContext。

     

优先级:-测试属性源的优先级高于那些   从操作系统环境或Java系统加载   属性以及应用程序添加的属性源   通过@PropertySource声明性地或以编程方式(例如,通过   ApplicationContextInitializer或其他某种方式)。因此,测试   属性源可用于有选择地覆盖属性   在系统和应用程序属性源中定义。此外,   内联的properties()的优先级高于加载的属性   来自资源位置()。