【问题标题】:How to add classpath resource in application.yml file如何在 application.yml 文件中添加类路径资源
【发布时间】:2019-12-27 19:24:15
【问题描述】:

使用 spring-boot,如果是 application.properties 文件,则可以在值中指定类路径。

app.templates = classpath:app\mock-templates

如何在 application.yml 中指定相同的东西?

这样指定时,读取的值不正确 -

app:
  templates : 'classpath:app\mock-templates'

价值注入 -

@Value("${app.templates}")
private String templateLocation; 
// value injected is "classpath:app\mock-templates", it should be <absolute-path>\app\mock-templates

【问题讨论】:

  • 我认为您需要删除 yml 文件中的单引号
  • 我删除了引号,但 spring 产生的结果仍然相同。我希望它被实际的测试路径替换。
  • 所以你想直接在 yml 文件中给出路径?如果是这样,您可以提供类似 C:/tmp/path .. 的路径
  • 如果我硬编码到任何外部路径,在持续集成期间测试将失败。如果我指向资源文件夹 test 总是可以参考所提供的内容。

标签: spring-boot yaml


【解决方案1】:

我只是检查一下,无论您使用.properties 还是.yaml 文件,您都将始终将classpath:app\mock-templates 作为注入的属性值。没关系。 Spring 在读取属性时没有完成classpath: 前缀到真实路径。接下来将由ClassPathResource 完成。

附:我认为quotest在这里也没有任何意义。

【讨论】:

  • 在这种情况下,如果我希望“类路径:”成为实际路径,那将是理想的方式。这仅适用于测试。在主应用程序中的值被注入到外部路径以便工作,但测试不能引用该外部路径,它需要引用资源目录。
【解决方案2】:

我遇到了完全相同的问题,有办法解决这个问题。我尝试使用classpath,但它不起作用。然后我就这样用了

app:
  templates: "${PWD}/your/resources/dir/location"

在您的 application.yml 文件中。它对我有用,只需确保您的 PWD 来自您的测试运行的路径。如果您使用git hooks 运行测试,那么它主要是从项目根目录运行。

【讨论】:

    【解决方案3】:

    能够通过提及来完成这项工作 src/test/resources/&lt;file_name&gt; 在 application.yml

      truststore: src/test/resources/trust.jks
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多