Ⅶ.配置文件的使用方式
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包外的配置文件。

