Spring 了解 YAML 中的属性
Spring 是否放弃 YAML 作为 .properties / .xml 的替代品,因为:
[Spring Developer]:...YAML 已被考虑,但我们认为对空白进行显着计数是一场正在形成的支持噩梦... [参考来自 Spring 论坛]
我相信 YAML 对于属性来说很有意义,我目前正在项目中使用它,但很难以
<property name="productName" value="${client.product.name}" />
时尚的方式注入属性。
我缺少什么,或者我应该创建一个自定义 YamlPropertyPlaceholderConfigurer ?
Did Spring abandon YAML to use as an alternative to .properties / .xml because of:
[Spring Developer]: ...YAML was considered, but we thought that counting whitespace significant was a support nightmare in the making... [reference from spring forum]
I am confident YAML makes a lot of sense for properties, and I am using it currently on the project, but have difficulties to inject properties in a
<property name="productName" value="${client.product.name}" />
fashion.
Anything I am missing, or I should create a custom YamlPropertyPlaceholderConfigurer ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您引用的论坛帖子来自 dmServer 论坛,而不是 Spring Framework,两者之间几乎没有关系,所以我不会阅读其中的任何内容。
最重要的是,YAML 在 Java 世界中几乎是闻所未闻的,因此添加对它的支持充其量只是一个象征性的姿态(如果你能原谅这个表达的话)。 XML 在 Java 中占据主导地位,尤其是服务器端,因此在 Java 中逆流而上几乎没有什么用处,尤其是对于像 YAML 这样的少数格式。
话虽如此,假设您可以找到适用于 Java 的 YAML 解析器,那么编写您自己的
YamlPropertyPlaceholderConfigurer
应该很容易。The forum post you reference was from the dmServer forum, rather than the Spring Framework, and there's very little relation between the two, so I wouldn't read anything into it.
On top of that, YAML is pretty much unheard of in the Java world, so adding support for it would have been a token gesture (if you'll pardon the expression) at best. XML dominates in Java, especially server-side, so there's little use in swimming against the tide there, especially for a minority format like YAML.
Having said that, writing your own
YamlPropertyPlaceholderConfigurer
should be easy enough, assuming you can find a YAML parser for Java.我不知道这是否有点太晚了,但不是 - 您不必实现整个 YamlPropertyPlaceholderConfigurer 相反,您可以简单地创建自定义 PropertiesPersister 并将其添加为可选参数。
这是您的配置的外观
这是使用 SnakeYaml 的裸机(只读)实现,请随意添加您需要的内容,包括错误处理
作为额外的好处 - 这是我创建 Yaml 实例的方式
您也可以在 我的博客
I don't know if this is a bit too late but no - you don't have to implement whole YamlPropertyPlaceholderConfigurer instead you can simply create custom PropertiesPersister and add it as optional parameter.
Here's how your configuration will look
And here's bare-bone (read-only) implementation using SnakeYaml, feel free to add what you need including error handling
As added benefit - here's how I create Yaml instance
You can also read this in my blog
对于使用 Spring 3.1 的用户,您可以注册 Yaml PropetySource。 SnakeYaml代码来自Bostone代码(感谢),适应了Spring 3.1的新PropertySource系统。
请注意,这也是受到 ResourcePropertySource 的启发,它加载 ISO 8859-1 字符集中的属性。我为此打开了一个错误: SPR-10096
您可以将此属性源添加到您的应用程序中语境。这也可以在单元测试中完成:
For those using Spring 3.1, you can register a Yaml PropetySource. The SnakeYaml code is from the Bostone code (thanks) adapted to new PropertySource system of Spring 3.1.
Please notice that this is also inspired by ResourcePropertySource, and it loads properties in ISO 8859-1 charset. I opened a bug for that: SPR-10096
You can add this property source to your application context. This can also be done in your unit tests:
对于像我这样完全彻底的傻瓜,他们对作者实际上在做什么的了解为零,但无论如何都需要这样做......这就是我如何让它发挥作用。但不知道如何弃用 instanceOfYaml() 。
另一件事是,我的 Spring Boot Eclipse 项目从标记为 .yml 的文件读取,而不是从 .yaml 读取
For complete and utter nubs like me who have zero knowledge of what the author is actually doing, but need to do it anyway...here's how I made it work. Have no idea how to de-deprecate the instanceOfYaml() though.
One other thing, my Spring Boot Eclipse project read from files marked .yml, not .yaml