spring-boot项目使用systemctl启动无法读取指定目录配置文件

项目打包成为jar放到服务器部署,同等级创建config目录存放application相关配置文件,使用java -jar ***.jar启动可以使用config下面的配置文件信息(而不是取本身jar内部的配置文件),设置service服务,使用systemctl来启动服务后,项目能正常启动,但是从自身jar内部读取配置文件,而不是从config下获取配置文件,请教下怎么解决,又是因为什么,现在考虑的解决方法为在spring-boot创建工具类指定配置文件路径(ps:还是想不明白 单纯启动没问题 服务启动就不行)

GZYC(_FZS6R0C57_CSXY83

可以通过 ConfigFileApplicationListener.CONFIG_ADDITIONAL_LOCATION_PROPERTY 配置配置文件的扫描目录。

// 设置配置文件的扫描路径为:$HOME/config
String configLocation = "file:${user.home}" + File.separator + "config" + File.separator;
System.setProperty(ConfigFileApplicationListener.CONFIG_ADDITIONAL_LOCATION_PROPERTY, configLocation);
SpringApplication springApplication = new SpringApplication(App.class);
springApplication.run(args);

谢谢,这种设置配置文件的方式有很多都可以改,就是搞不懂我描述情况的原因,不知道是linux的原因还是其它什么,十分感谢

我也不知道。我没写入过 systemctl 服务。 :smile:

我写了这样的设置,但是propertiesListener那块引入不到我给注释了,其它项目使用的这种方式来设置配置文件路径

你这个操作是是干啥啊?

这是别的项目组的同事使用的引入外部配置文件,设置外部配置文件的路径,比方说你的application.yml放在/home/project/config下面,propertyFileNameList.add(“file:/home/project/config/application.yml”);这样子来设置,可以设置多个,按照优先级来获取配置文件

我上面那个代码就可以实现。主要的思想就是在 System.properties 中写入一个变量 spring.config.additional-location 。它的值就是springboot配置文件的地址目录。它是扩展了原来的默认的搜素目录,而不是覆盖。可以用表达式,可以是file协议访问本地。可以有多个,使用逗号分隔。

只需要约定好本地存放配置文件的目录就是了。

嗯,好的 我试一下,这次项目重构才使用spring-boot有很多地方还在学习了解, 谢谢

1赞