Spring - 通过@Value 读取具有多行属性值的 YAML

Posted

技术标签:

【中文标题】Spring - 通过@Value 读取具有多行属性值的 YAML【英文标题】:Spring - Read YAML with multiline property value over @Value 【发布时间】:2019-08-08 13:03:50 【问题描述】:

目前我正在通过@PropertySouce 实现一个YAML 文件并通过@Value 读取属性本身。 但是现在我的 YAML 文件中有一个多行属性,并且希望以相同的方式读取它。 (我想将我的 sql 查询存储在我的代码之外)

我知道,我可以在“>”或“>-”或“|”上指示多行 YAML 字符串。 但是当我尝试这个并通过@Value 读取属性时,我只得到“>”作为我的字符串的结果。 那么,有没有办法完整地读取多行 YAML 属性?

我知道,我可以用反斜杠转义每一行,但这对我来说不是最好的解决方案。

所以例如我想在我的 test.yml 中读取键“multilinekey”:

multilinekey: >
   Hi, I am a multiline String.
   But I can't get readed over @Value by spring.

并希望在我的代码中实现此值,如下所示:

@PropertySource("classpath:/test.yml")
public class myTestClass
   @Value("$multilinekey")
   private String multiline;

   ...

有没有办法做到这一点?

或者有没有更好的方法将我的 sql 查询外包到自己的文件中,并通过 @Value 轻松包含它们?

【问题讨论】:

所以您是说,使用您显示的代码,变量 multiline 中有一个>?这意味着该文件没有被解析为 YAML——你是否配置了 Spring 来做到这一点?见this answer。 【参考方案1】:

这对我来说很好用:

controller.java

@Value("$str")
String str;

@GetMapping("/probe")
public String probe()
    return str;

应用程序.yaml

str:"This is a very long sentence
    that spans several lines in the YAML
    but which will be rendered as a string
    with NO carriage returns."

【讨论】:

当我在我的代码中尝试这个时,我只会在 str 变量中得到“这是一个很长的句子 你能粘贴你的确切 yml 文件和你使用 @Value 引用它的类吗?似乎很奇怪,它不适合你【参考方案2】:

感谢 flyx yml 文件未解析为 yaml 文件。 所以this Link 就是答案。

【讨论】:

以上是关于Spring - 通过@Value 读取具有多行属性值的 YAML的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Batch 读取一个单元格中包含多行的 CSV 文件?

SpringMVC通过@Value读取配置文件

Spring Properties整理

Dictionary对象可以通过VALUE读取KEY吗

日常错误spring-boot配置文件读取不到

多行的spring数据jpa更新不起作用