在Spring YAMLhtml" target="_blank">配置文件中,我需要有一个参数,例如
csv:
file:
pattern: /some/path/${app-name}.csv
其中< code>${app-name}在运行时被Java代码动态替换,我不希望Spring在启动时替换它。
为了实现这一点,我需要转义$
字符,以便Spring不会将其解释为SpEL。
以下答案在YAML不适用:
>
\$
如何逃脱EL美元符号?
#{'$'}
Spring属性文件中的转义属性引用
如果包含美元符号(${var}),则无法读取属性
我尝试了所有的组合,比如
pattern: /some/path/\${app-name}.csv
pattern: "/some/path/\${app-name}.csv"
pattern: /some/path/#{'$'}{app-name}.csv
pattern: "/some/path/#{'$'}{app-name}.csv"
它们都没有生成包含请求字符串的变量,带有美元符号,但不带转义字符。
请注意,这是 YAML 配置。在 YAML 文件中,#
是行注释字符,从此字符开始的所有内容都将被忽略。如果我使用 \#
,则 \
将传递给字符串。
补充:自 2008 年 6 月 25 日起,有一个 Spring 项目开放期 9628:
目前没有办法注入${...}不会被PropertyPlaceholderConfigurer拾取的表达式。理想情况下,我们应该能够注入一个包含${...}供以后在其目标bean中使用,而无需PropertyPlaceholderConfigurer的参与。
我遇到了同样的问题。因此,您可以通过使用 yaml 文字样式符号“|
”或literal_strip“|
-”来解决此问题,如以下示例所示。
应用程序. yml
csv:
file:
pattern: |-
/some/path/${app-name}.csv
其实我的问题是在yml中配置一个公式,然后在java中动态解析表达式。在这里分享解决方案。
我选择spring el解决方案,使用spring版本< code>5.0.9.RELEASE。
我在yml中定义了一个公式,
score:
formula: |-
10 * #x + #y
然后在Spring成分豆中,
@Value("${score.formula}")
String scoreFormula;
最后通过使用spring el,
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
context.setVariable("x", 1);
context.setVariable("y", 1);
Integer score = parser.parseExpression(scoreFormula).getValue(context,Integer.class);
参考
YAML-多行
Spring目前没有为属性占位符提供转义机制,有一个公开的问题(于2008年6月25日公开)。在评论中,提到了这个解决方法(我不确定它是否适用于YAML):
csv:
file:
pattern: /some/path/#{'$'}{app-name}.csv
请注意,当在空格后或行首使用时,YAML中的< code>#会开始注释。
我也有同样的问题,我刚刚发现<罢工>哑的聪明的解决方案定义了一个名为dollarSign或ds的属性。
ds: "$"
然后这样使用,${ds}
将在运行时替换为$$
。
csv:
file:
pattern: /some/path/${ds}{app-name}.csv
当它起作用的时候有点好笑。
我正在阅读Log4j2的配置部分。http://logging.apache.org/log4j/2.x/manual/configuration.html 双$$符号是什么意思?e、 g.$${sd:type}?
在模块化的Spring配置应用程序中,我们使用工厂bean跨模块边界提供bean实例。 例如,一个模块A可以通过名称name公开一个bean实例。然后,另一个模块B可以通过样式声明来使用该bean 请注意,模块具有分离的类加载器层次结构,并且A/name的实际实现类在B中可能不可见。就像在OSGI中一样(尽管这不是OSGi)。 我的目标是在 B 的编程应用程序上下文中提供 A/name。但是在尝试
问题内容: 我想要grep ,我希望结果是 为了区分,我将提示标记为。 这里有什么问题? 应该采取什么 grep的字符串 是什么? 问题答案: 问题在于外壳程序在双引号字符串内扩展了变量名。因此,它尝试读取以first开头的变量名。 另一方面,单引号中的变量不会扩展。因此,如果不是因为在正则表达式中表示行尾的特殊字符这一事实,那 将是 可行的。因此需要进行转义:。
问题内容: 我正在用XML编写一些SpEL语句,但无法让解析器确定何时需要转义字符。 我尝试了以下操作: 但是,添加\似乎并不能避免使用单引号,并且我一直收到解析器异常。 有什么办法可以逃避这些价值观? 问题答案: 从文档中: “要将单引号本身放在字符串中,请使用两个单引号字符。”
请告诉我如何在udf中使用hive conf变量,以及如何在hive udf中访问hive配置?
如何在JasperStudio软件中自动添加Textfield中的美元符号?我有一个报告显示价格,我想jasper studio添加一个自动的$符号。