问题描述
Spring Boot 2.2.6-发布
在我的application.yml
中,有以下一行:
logging.config: classpath:my-logback-config.xml
这很好用,spring很好地进行了配置
在我的my-logback-config.xml
中,有以下一行:
<springProperty name="LOG_HOST" source="config.logHost" />
<springProperty name="LOG_PORT" source="config.logPort" />
同样,这很好,它可以从外部配置文件获取其值,该文件在ENV变量中定义
SPRING_CONfig_ADDITIONAL_LOCATION=file:/my-env.properties
但是当我启用Spring Cloud Kubernetes时,此操作失败,并显示UnkNowHostException:"LOG_HOST_IS_UNDEFINED" cannot be resolved.
(LOG_HOST
的值用于设置网络附加程序)
为什么启用Spring Cloud Kubernetes会更改日志记录初始化的行为?
似乎尚未加载SPRING_CONfig_ADDITIONAL_LOCATION中的值。
我无法从configMap加载此值,因为在初始化日志记录时尚未初始化Spring Cloud Kubernetes。
解决方法
最后,问题在于ENV var SPRING_CONFIG_ADDITIONAL_LOCATION
被设置为文件夹,而不是容器上的文件。
在Windows本地,将'SPRING_CONFIG_ADDITIONAL_LOCATION'设置为文件或文件夹似乎可行,但是在Docker映像(RH linux)中会产生影响。
将SPRING_CONFIG_ADDITIONAL_LOCATION
设置为文件夹时,将忽略附带的“ .properties”文件的值。
我可以通过更改docker文件来重现(修复)该问题:
ENV SPRING_CONFIG_ADDITIONAL_LOCATION="/mnt/properties/application.properties"
到
ENV SPRING_CONFIG_ADDITIONAL_LOCATION="/mnt/properties/"