Java Jar包中logback-spring无法读取外部配置属性的解决方案咨询
解决方案
方案1:改用spring.config.additional-location(推荐)
不要用spring.config.location覆盖默认配置加载顺序,改用追加模式的spring.config.additional-location——它会在默认配置(包括Jar内的application.properties)基础上加载外部配置,且加载时机足够早,能被logback读取到。
启动命令修改为:
java -jar myapplication.jar -Dspring.config.additional-location=file:external.properties
Jar内置的application.properties会被默认加载,外部的external.properties作为补充配置生效,logback-spring.xml能获取到所有配置属性。
方案2:直接传递logback所需的系统属性
如果仅需让logback读取外部配置中的特定属性,可直接在启动命令中通过-D参数传递这些属性,绕开Spring配置加载顺序的问题。
比如外部配置中有logging.file.path=/var/log/myapp,启动命令改为:
java -jar myapplication.jar -Dlogging.file.path=/var/log/myapp -Dspring.config.location=classpath:/application.properties,file:external.properties
logback初始化时会直接读取这些系统属性,无需等待Spring加载外部配置文件。
方案3:调整spring.config.location的加载顺序
如果坚持使用spring.config.location,将外部配置放在加载顺序的最前面,确保Spring先加载外部配置,再加载Jar内的配置,这样logback能通过springProperty标签获取到外部属性。
启动命令修改为:
java -jar myapplication.jar -Dspring.config.location=file:external.properties,classpath:/application.properties
同时在logback-spring.xml中使用springProperty标签绑定属性(需确保logback-spring.xml在classpath下):
<springProperty scope="context" name="logFilePath" source="logging.file.path" defaultValue="/tmp/logs"/> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>${logFilePath}/app.log</file> <!-- 其他appender配置 --> </appender>
内容的提问来源于stack exchange,提问作者programmer123456
相关产品推荐
相关产品推荐

