我是Spring Boot的新手。
在“资源”下有2个文件:
-- resources
-- application.properties
-- log4j2.xml
在开发环境中,一切正常。
在生产环境中,我复制了两个文件并将它们放在app.jar旁边:
-- app_folder
-- my-app.jar
-- application.properties
-- log4j2.xml
当我启动my-app.jar时,:
这不是开箱即用吗?我在做什么错了?
答案 0 :(得分:0)
您为什么认为它可以那样工作?
诚然,根据其documentation,如果Spring Boot与jar文件位于同一目录中,它将正确检测application.properties
。
话虽如此,log4j2.xml
不是由Spring Boot读取,而是由Log4J2 Framework读取,并且根据其documentation,该框架还可以在类路径中查找文件。
如果文件在其他位置,则需要指定如下路径:
java -Dlog4j.configurationFile=path/to/log4j2.xml -jar my-app.jar
编辑:
my-app.jar是可执行文件,因此启动my-app时不会调用'java'命令。
是的。即使您是从GUI调用(例如,在Windows中的资源管理器中双击),它仍然可以在后台运行java -jar my-app.jar
。
app.jar所在的类路径不是同一文件夹吗?
再次,你为什么会认为是这样?
在Java文档(对于Java 8为here,在Folders and Archive Files
部分中,它明确指出,如果将类存储在jar中,则类路径仅包含jar中的内容(尽管以防万一)由于具有自定义类加载器,因此它还包含嵌入在jar中的jar,通常不是这种情况-参见Executable Jar Format。
在尝试使用以前从未使用过的任何框架/库/编程语言之前,您确实应该阅读文档(或至少其中的相关部分),从长远来看,它将节省大量时间。
答案 1 :(得分:0)
我要做的就是放一个名为
的文件name-of-my-spring-boot-jar-file.conf
与jar文件本身位于同一目录中。 conf文件的内容:
JAVA_OPTS="-Dlog4j.configurationFile=/home/<user>/log4j2.xml"