Hon*_*dek 9 java spring yaml escaping spring-el
在 Spring YAML 配置文件中,我需要有一个参数,如
csv:
file:
pattern: /some/path/${app-name}.csv
Run Code Online (Sandbox Code Playgroud)
其中,${app-name}在运行时由Java代码动态地更换,我不想春在启动更换。
为了实现这一点,我需要对$字符进行转义,以便 Spring 不会将其解释为SpEL。
下面的答案并不在YAML工作:
我尝试了所有的组合,比如
pattern: /some/path/\${app-name}.csv
pattern: "/some/path/\${app-name}.csv"
pattern: /some/path/#{'$'}{app-name}.csv
pattern: "/some/path/#{'$'}{app-name}.csv"
Run Code Online (Sandbox Code Playgroud)
并且它们都没有产生包含所请求字符串的变量,带有美元符号但没有转义字符。
请注意,它是YAML配置。在 YAML 文件中,#是行注释字符,从这个字符开始的所有内容都将被忽略。如果我使用\#,\然后将传递给字符串。
添加:自 2008 年 6 月 25 日以来,已有一个Spring 项目公开问题 9628公开:
目前无法注入 PropertyPlaceholderConfigurer 不会选取的 ${...} 表达式。理想情况下,我们应该能够注入一个包含 ${...} 的字符串,以便稍后在其目标 bean 中使用,而无需 PropertyPlaceholderConfigurer 参与。
小智 5
我遇到了同样的问题,我发现愚蠢的聪明解决方案定义了一个名为 DollarSign 或简称为 ds 的属性。
ds: "$"
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它,${ds}将$在运行时替换为。
csv:
file:
pattern: /some/path/${ds}{app-name}.csv
Run Code Online (Sandbox Code Playgroud)
它工作时有点有趣。
Spring 目前不提供属性占位符的转义机制,有一个未解决的问题(于 2008 年 6 月 25 日开放):
目前无法注入占位符表达式 (
${...})
在评论中,提到了这个解决方法(我不确定它是否适用于 YAML):
csv:
file:
pattern: /some/path/#{'$'}{app-name}.csv
Run Code Online (Sandbox Code Playgroud)
请注意,在 YAML 中,当在空格之后或行首使用时,#会开始注释。
| 归档时间: |
|
| 查看次数: |
11445 次 |
| 最近记录: |