我尝试了各种方法来查找文件,并始终遇到此异常:
java.io.FileNotFoundException:类路径资源[src / main / resources / sport.properties]无法打开,因为它不存在
这是我的文件夹结构:
此字符串中的哪个路径正确? @PropertySource(“ classpath:/src/main/resources/sport.properties”)
答案 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()的优先级高于加载的属性 来自资源位置()。