【问题标题】:Spring can't find properties fileSpring找不到属性文件
【发布时间】:2019-05-10 20:07:28
【问题描述】:

我尝试了所有方法来查找文件,但总是出现此异常:

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

这是我的文件夹结构:

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

【问题讨论】:

  • 重命名:sport.properties -> application.properties

标签: spring


【解决方案1】:

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

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

  • 字符串"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")

【讨论】:

    【解决方案2】:

    我建议使用下面提到的TestPropertySource 进行集成测试。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 2012-08-27
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多