使用此设置(从Eclipse使用Windows10)
我能够正确启动SpringBoot应用程序。这个也起作用(相同的目录模式):
现在,我将我的项目打包为JAR,并且我想使用外部属性文件。我在同一目录下JAR旁边有一个teste32.yml
文件(也尝试在/config
目录内使用它,如显示here所示,但它也不起作用)
我想每次都动态地使用JAR文件旁边的属性文件。不管它们在哪个目录下,我都想动态地始终指向一个属性文件,该文件始终与JAR处于同一目录。我想对我的客户说:“获取这个JAR和这个文件,将它们放在任何您想要的位置,然后运行此命令X,一切都会好起来的”。我试图发现命令X,但在添加一些动态路径之前,我尝试使用绝对路径。我正在使用这个:
java -jar myJar.jar -Dspring.config.name=teste32 -Dspring.config.location=C:\workspace\myProject\target\
我手动在teste32
内复制了target\
进行测试。但这没有用。这也不起作用(仅spring.config.location
个变体):
-Dspring.config.location=file:C:\workspace\myProject\target\
-Dspring.config.location=classpath:/
-Dspring.config.location=file:C:/workspace/myProject/target/
I also tried with no spring.config.location, only name
所以我的问题是:
classpath:
和file:
是什么意思?到目前为止,我凭运气获得了2种正确的设置,我想了解何时使用它们。classpath
变成什么? 更新
在正确的示例上使用--debug
时,我非常恳求这一行(仍然显示Spring标语):
2018-09-25 15:45:14.480 DEBUG 11360 --- [ main] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file 'file:src/main/resources/xirulei/teste32.yml' (file:src/main/resources/xirulei/teste32.yml)
但是将myJar.jar
和teste32.yml
移动到特定目录并运行java -jar myJar.jar -Dspring.config.name=teste32 --debug
之后(没有spring.config.location,因为teste32
与JAR处于同一目录) ,我只是没有得到任何ConfigFileApplicationListener
调试行。
答案 0 :(得分:0)
a)java -jar myJar.jar -Dspring.config.name=teste32 -Dspring.config.location=C:\workspace\myProject\target
您是否检查了target
目录的内容?我很确定您的cfg文件已放置到target\classes\xirulei
,这就是为什么Spring在target
找不到它的原因
b)当将teste32.yml
与jar文件放在同一目录中时,Spring必须能够找到它(假定该目录为工作目录)而没有-Dspring.config.location
(但是您仍然需要提供{ {1}})
c)当您使用-Dspring.config.name=teste32
并且不提供其他类路径时,-jar
指向jar内包的根目录。 Spring无法在classpath:
上找到您的文件,因为您的文件位于classpath:/
答案 1 :(得分:0)
好吧,毕竟这是一个简单的错误。正如documentation says和已经指出的here一样,它应该是
java -jar myproject.jar --spring.config.name=myproject
不是
java - jar myproject.jar -Dspring.config.name=myproject
如问题所述,仅在使用Eclipse -D
(JVM参数)时是必需的。使用bash / cmd时,仅--
(程序参数)是正确的选项: