Ⅶ.配置文件的使用方式


1.针对不同的应用场景使用不同的配置文件

  一个实际的工程可能在开发,测试,生产时的环境有所不同,这时可以使用profile来设置不同的配置文件。profile支持properties和yaml两种格式,不过yaml还特殊支持代码块的方式进行调用。

  在properties格式下或者yaml格式
  格式:application-(profies).properties/yml
  eg:application-dev.properties/yml【在开发环境下】
  eg:application-prod.properties/yml【生产环境下】
  ps:可以自己制定profile的标签

  如果在正常情况下,默认使用主配置文件application.properties文件,假如想使用application-dev.properties,就需要在主配置文件下使用spring.profiles.active的方式,这里是spring.profiles.active=dev,就可以使用配置文件application-dev.properties。
  如图所示,我在resources文件夹下新建了application-dev.properties和application-prod.properties两个配置文件,并在主配置文件里使用了spring.profiles.active=dev来激活application-dev.properties

  除此之外,yaml由于自己的语法的特性,还支持多文档块的方式。yaml可以使用---来切分不同的文档块。然后使用spring:profiles的方式来命名profile的标签,类似spring:profiles:dev,如果要激活哪个文档块,可以使用spring:profiles:activate的方式激活制定的profile。   类似spring:profiles:activate:dev。   如图所示,我制定了dev和prod的两个不同的profile,然后激活了prod这个profile。

  激活方式除了在配置文件中使用的方法之外,还可以使用命令行的方式来激活,类似--spring.profiles.active=dev,命令行的方式会比配置文件中制定的优先级更高,也就是说,即使你在文件夹中制定了一种标签的配置文件,我在命令行运行的时候添加了激活方式,可以命令行的优先级大于前者,这方便了我们的调试运行工作。   在开发过程中可以如图在Run/Debug Configuration的Program arguments下设置命令行,如--spring.profiles.active=dev,如图所示。

  最后一种激活方式是使用虚拟机的方式同样在Run/Debug Configuration的VM options下设置 ,如-Dspring.profiles.active=dev。

  总结:不同的激活方式都是在检测到不同的profile标签的基础上去激活的,所有标签的制定不能有错。

2.配置文件的加载位置

  spring boot启动的时候会在默认的位置扫描扫描application.properties或者application.yml进行配置。
  默认位置扫描的优先顺序为:
    file:./config/
    file:./
    classpath:/config/
    classpath:/
  如图所示,我在项目中新建了四个不同路径下的配置文件。

  spring boot会按照优先顺序加载全部的配置的文件,相同的配置会按优先级覆盖,不同的配置会保存,这也就是互补设置

3.添加外部的配置文件

  同样的,我们也可以使用spring.config.location来添加外部的配置文件来作为默认的文件位置,不过这种方式是在项目打包之后,在运维时可能运用到的,用这种方式来加载项目以外的制定目录下的配置文件,同样的,这个时候加载进来的文件也会跟之前的文件形成互补设置
  此时指定的外部的配置文件优先级会更高一点。
  类似在运行jar包时使用java -jar ***.jar –spring.config.loction=C:/application.properties。


4.外部配置的加载顺序

  外部配置的加载在官网多达17种,这里只挑出常见的几种进行描述。
  springboot会从下列的位置进行加载配置,优先级从高到低,所有的配置形成互补配置。

  1.命令行参数
  2.来自java:comp/env的JNDI属性
  3.Java系统属性(System.getProperties())
  4.操作系统环境变量
  5.RandomValuePropertySource配置的random.*属性值
  6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  10.@Configuration注解类上的@PropertySource
  11.通过SpringApplication.setDefaultProperties指定的默认属性

  使用说明:
  1.在使用命令行参数时,为了节省书写配置文件的时间,可以直接命令行赋值。类似在运行jar包时使用java -jar ***.jar –server.port=8081 这样子可以直接设置端口号。使用格式:多个配置用空格分开; –配置项=值。
  2.外部的配置文件放在当前路径下一起就可以被调用了。
  3.第6到第9点可以总结为优先加载带profile标签的配置文件,再加载不带profile标签的文件,在这里面,由jar包外的配置文件到jar包内的配置文件进行扫描,此处是指打包好的jar包所在目录下,放置在身旁的配置文件,如果有这个文件的话,jar运行后,可以先调用外部的配置文件互补覆盖jar包内的配置文件,有利于运维,如图所示为jar包外的配置文件。