你能解释一下这个Spring环境变量分辨率吗?

Abh*_*kar 6 spring spring-mvc environment-variables logback spring-boot

春季启动文档具有下面的示例记录文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

你能帮我理解一下${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}吗?有什么-用?

And*_*son 6

与 Bash 一样,Logback 使用:-作为其默认值运算符。有问题的行正在设置LOG_FILE属性:

  • 如果LOG_FILE已经设置,使用那个
  • 否则,如果LOG_PATH设置,使用后缀spring.log
  • 否则,如果LOG_TEMP设置,使用后缀/spring.log
  • 否则,如果java.io.tmpdir设置,使用后缀/spring.log
  • 否则使用 /tmp/spring.log


Adr*_*hum 5

它与 Spring 无关。

Logback XML 配置本身具有这种占位符处理以用变量替换占位符。logback 中占位符的语法是${VARNAME},如果你想要默认值如果VARNAME不存在,你可以通过${VARNAME:-DEFAULT}(ref: Logback Configuration) 来完成。是的, a :-,后面跟着默认值。

那么你引用的内容就很容易理解了:

${LOG_FILE:-                                                             }
            ${LOG_PATH:-                                      }spring.log
                        ${LOG_TEMP:-                        }/
                                     ${java.io.tmpdir:-    }
                                                       /tmp
Run Code Online (Sandbox Code Playgroud)

(你真的需要解释上面的意思吗?)