运行 Spring Boot fat-jar 时如何覆盖 Java 资源?

Posted

技术标签:

【中文标题】运行 Spring Boot fat-jar 时如何覆盖 Java 资源?【英文标题】:How to override Java resources when you run Spring Boot fat-jar? 【发布时间】:2021-08-02 05:32:14 【问题描述】:

我创建了一个 Spring Boot far-jar,其中包含作为资源的 log4j.xml 配置文件。现在,当我运行 fat-jar 时,我正试图以这种方式覆盖它

$ java -cp conf/ -jar target/myapp.jar

我在conf/ 文件夹中放入了一个新的log4j.xml。但是没什么,它继续使用jar里面的资源。

【问题讨论】:

【参考方案1】:

如果您的目标只是定义自己的 log4j.xml 配置文件,这可能会有所帮助:

java -Dlogging.config='/path/to/log4j2.xml' -jar target/myapp.jar

(这在How can I change the default location of log4j2.xml in Java Spring Boot? 中已经提到)

如果您只想通过类路径添加添加资源,您可以参考 https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-executable-jar-format.html#executable-jar-property-launcher-features 我在哪里找到loader.path

loader.path 可以包含目录(递归扫描 jar 和 zip 文件)、存档路径、存档中的目录 扫描 jar 文件(例如,dependencies.jar!/lib),或 通配符模式(用于默认的 JVM 行为)。存档路径可以是 相对于 loader.home 或文件系统中的任何位置 jar:file: 前缀。

【讨论】:

如果我的基础log4j2.xml 包含其他配置片段?例如,我有一个仅用于记录器的特定片段,我只想覆盖它。 在阅读***.com/a/38408283/2590615 和引用的链接时,我认为您只需添加多个以逗号分隔的部分。见github.com/kamalcph/Log4j2Examples/blob/…

以上是关于运行 Spring Boot fat-jar 时如何覆盖 Java 资源?的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot:apache commons-configuration2 异常:java.lang.IllegalArgumentException: name原因分析

[转] maven打包可运行的fat-jar的简单方法

远程机器未运行时如何为远程 JMS 队列初始化 ConnectionFactory?

如何使用fat-jar打包jar文件啊

修改fat-jar名称

使用 Spring ChannelAwareMessageListener 时如何处理 RabbitMQ 消费者取消通知