【问题标题】:Is String manipulation possible in YAML file?YAML 文件中是否可以进行字符串操作?
【发布时间】:2022-02-25 03:08:43
【问题描述】:

是否可以在 YAML 文件中进行字符串操作??

Spring Boot 应用程序中的配置文件 application.yml 正在从 pom 文件 中读取版本为

<properties>
    <revision>10.10.11</revision>
</properties> 

YAML 文件

logging:
  file:
    name: @revision@/app.log

问题是,如何从修订值中删除点,即

“10.10.11”→“101011”

喜欢

name: @revision@.replace('.', '')/app.log

,这样可以在不带点的文件夹上生成日志文件

【问题讨论】:

    标签: json regex spring-boot yaml properties-file


    【解决方案1】:

    对于一般情况,您可以使用SpEL,它允许调用 Java 方法:

    name: '#{"@revision@".replace(".", "")}'
    

    您需要外部引号告诉 yml # 不会开始注释,并引用 @revision@ 以便它被 SpEL 解释为字符串。

    问题在于它似乎不适用于 logging.file.name,因为它是由 LoggingApplicationListenerLogFile 读取的,这似乎无法解释 SpEL。

    通过 Spring Boot 配置自定义这一点似乎并不容易,但您可以改为定义自己的侦听器(可能基于上述侦听器)来定义自己的命名方案。

    以下问题也可能有帮助:register custom log appender in spring boot starter

    【讨论】:

    • 如果使用上面的 name 值,得到错误Logging system failed to initialize using configuration from 'null' java.util.regex.PatternSyntaxException: Illegal repetition near index 0 #{"10.10.11".replaceAll(".", " ")}/app.log.\d{4}-\d{2}-\d{2}.\d{1,2}.gz
    • @Kishore_2021 确实,很抱歉,我用不同的属性对其进行了测试。恐怕那时仅使用 yml 配置就无法完成您的要求。我认为您将不得不实现自己的配置,而不是依赖 Spring Boot。
    • 我们不能使用自己的配置,因为日志必须在Spring Boot Application启动之前创建,并且在应用运行之后自己的配置才会生效,不是吗??我的理解正确吗?
    • @Kishore_2021 我已经用另一种可能的方法更新了答案
    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多