我尝试了所有方法来查找文件并始终得到此异常:
java.io.FileNotFoundException:无法打开类路径资源[src / main / resources / sport.properties],因为它不存在
这是我的文件夹结构:
这个String中的哪条路径是正确的? @PropertySource( “类路径:/src/main/resources/sport.properties”)
我建议使用 TestPropertySource ,如下所述进行集成测试 .
TestPropertySource
@RunWith(SpringRunner.class) @ContextConfiguration(locations = "/applicationContext.xml") @TestPropertySource(locations = "/sport.properties")
@TestPropertySource是一个类级注释,用于配置属性文件的位置()和内联属性(),以便为集成测试的ApplicationContext添加到Environment的PropertySource集合中 . 优先级: - 测试属性源的优先级高于从操作系统环境或Java系统属性加载的属性源,以及应用程序通过@PropertySource或编程方式(例如,通过ApplicationContextInitializer或其他方式)以声明方式添加的属性源 . 因此,测试属性源可用于有选择地覆盖系统和应用程序属性源中定义的属性 . 此外,内联属性()的优先级高于从资源位置()加载的属性 .
此字符串中的哪条路径是正确的? @PropertySource( “类路径:/src/main/resources/sport.properties”)
这是不正确的,因为你混合了两个“名称空间” .
字符串 "classpath:/src/main/resources/sport.properties" 是一个URI .
"classpath:/src/main/resources/sport.properties"
"classpath" 表示您告诉Spring查看应用程序的运行时类路径 .
"classpath"
但 "/src/main/resources/sport.properties" 不是运行时类路径上的名称 . 而是它是文件系统中相对于Eclipse项目目录的路径名 .
"/src/main/resources/sport.properties"
由于您在Eclipse中使用Maven,因此您需要了解资源树是否已添加到类路径中;即 "${MAVEN_PROJECT}/src/main/resources/a/b" 在运行时类路径上变为 "/a/b" .
"${MAVEN_PROJECT}/src/main/resources/a/b"
"/a/b"
构成应用程序的所有Maven项目的 "${MAVEN_PROJECT}/src/main/resources" 目录以这种方式添加到类路径中 .
"${MAVEN_PROJECT}/src/main/resources"
当进行单元测试时,也会在类路径中添加 "${MAVEN_PROJECT}/src/test/resources" 目录 .
"${MAVEN_PROJECT}/src/test/resources"
简而言之,你应该使用 @PropertySource("classpath:/sport.properties")
@PropertySource("classpath:/sport.properties")
2 回答
我建议使用
TestPropertySource
,如下所述进行集成测试 .这是不正确的,因为你混合了两个“名称空间” .
字符串
"classpath:/src/main/resources/sport.properties"
是一个URI ."classpath"
表示您告诉Spring查看应用程序的运行时类路径 .但
"/src/main/resources/sport.properties"
不是运行时类路径上的名称 . 而是它是文件系统中相对于Eclipse项目目录的路径名 .由于您在Eclipse中使用Maven,因此您需要了解资源树是否已添加到类路径中;即
"${MAVEN_PROJECT}/src/main/resources/a/b"
在运行时类路径上变为"/a/b"
.构成应用程序的所有Maven项目的
"${MAVEN_PROJECT}/src/main/resources"
目录以这种方式添加到类路径中 .当进行单元测试时,也会在类路径中添加
"${MAVEN_PROJECT}/src/test/resources"
目录 .简而言之,你应该使用
@PropertySource("classpath:/sport.properties")