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的主要内容,如果未能解决你的问题,请参考以下文章