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

时间:2016-06-01 18:51:00

标签: spring spring-mvc spring-boot environment-variables logback

Spring Boot docs有以下示例记录文件:

<?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>

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

2 个答案:

答案 0 :(得分:4)

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

  • 如果已设置LOG_FILE,请使用
  • 否则,如果设置了LOG_PATH,请使用后缀为spring.log
  • 的内容
  • 否则,如果设置了LOG_TEMP,请使用后缀为/spring.log
  • 的内容
  • 否则,如果设置了java.io.tmpdir,请使用后缀为/spring.log
  • 的内容
  • 否则请使用/tmp/spring.log

答案 1 :(得分:4)

它与Spring无关。

Logback XML配置本身具有这种占位符处理方式,可以用占位符替换占位符。在logback中占位符的语法是${VARNAME},如果您想要VARNAME时不需要默认值,则可以${VARNAME:-DEFAULT}(参考:Logback Configuration)执行此操作。是的, :-,按默认值。

然后你引用的内容很容易理解:

${LOG_FILE:-                                                             }
            ${LOG_PATH:-                                      }spring.log
                        ${LOG_TEMP:-                        }/
                                     ${java.io.tmpdir:-    }
                                                       /tmp

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