在配置文件中的classpath和file区别

doMore 1,676 2019-10-14

在生产环境运行springboot jar 包时需要将配置文件放在jar包外面方便运维进行操作时,需要设置一个环境属性 spring.config.additional-location(最简单的就是在启动类main中使用System.setProperty) 配置该属性值的方法有以下几种方式:

  • classpath 优先本项目class路径查找,没有的话依次在其他jar包中class路径查找,找到第一个匹配的为止
  • classpath* 加载到所有class路径下的配置文件,包括jar包的class路径下,最终加载所有匹配的
  • file 通过URL加载,来源为文件系统(注意文件读取权限)
  • http 通过URL加载,来源为网络 (none) 根据 ApplicationContext 进行判断(这个我没试过)

classpath 指的是WEB-INF/classes,lib,两者的访问顺序lib>classes。(该目录是资源文件,客户端不能直接访问) classpath* 会加载所有的class路径下的配置文件,包括引用的lib/ 下的jar中配置文件,如果有相同名字的倒叙加载 假如 spring的加载顺序为 A->B 则最终的加载结果是B。 file: 指定的是系统文件 file:$/.halo/ 表示的是用户目录下的 .halo文件夹

可以通过jvm指定配置文件的路径

java -jar -D *.jar 

spring中引用方法和我们自己写的system.properties中的参数没什么区别。但是JVM的参数优先级别要比我们自己写的system.properties的优先级别要高。优先级别越高越先执行,匹配到了就不再向下执行。environmentProperties,systemProperties,systemEnvironment的优先级别要大于用户的配置。哪怕用户配置<context:property-placeholder order="1"/>也是nvironmentProperties,systemProperties,systemEnvironment的优先级别更高。

版权声明:本文为CSDN博主「M1lo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/shangmingtao/article/details/78311189