前言
阅读本章,建议先阅读Spring Ioc 环境与配置。Spring Ioc 环境与配置中讲解了@PropertySource以及环境变量等的用法。
Spring Boot中的配置
- 默认属性(通过SpringApplication.setDefaultProperties指定的属性)
- @PropertySource加载的属性(Spring Ioc 环境与配置)
- 配置数据(如application.properties、yml文件 – 这是我们最常用的配置文件的方式)
- 操作系统环境变量(如JAVA_HOME等)
- Java 系统属性 ( System.getProperties())
- 命令行参数(如:java -jar myproject.jar --spring.config.name=myproject)
- @TestPropertySource或测试配置文件(测试的配置虽然优先,但它仅在测试阶段可用)
以上只列出来我们常用的一些配置来源,不是全部
Spring Boot中按1~7的顺序依次覆盖同名属性。就是像我们在Spring Ioc 环境与配置一章中的示例,JAVA_HOME的属性配置,最终使用的是系统的环境变量,我们子Properties文件中的配置被覆盖掉了。
命令行属性
默认情况下,我们在执行命令运行Spring boot程序时,可以直接通过命令行添加属性配置。
$ java -jar app.jar --server.port=9090 --server.servlet.context-path=/test
-- 之后即是配置的属性名称,Spring boot会将他们加载到Spring Environment。
按照上面我们所说的覆盖顺序,命令行配置将覆盖我们常用的配置文件Properties或yml中的同名配置。
禁用命令行属性
命令行属性加载默认是启用的,如果你要禁用,请使用如下方式。
SpringApplication.setAddCommandLineProperties(false);
配置文件属性
配置文件就是我们常用的Properties配置文件或yml配置文件。
注意:properties和yml使用其一即可。如果有同名的properties文件和yml文件,那么Spring boot会优先使用properties。
application.properties和application.yaml
Spring boot会自动加载如下几个位置的application命名的配置文件。
- 类的根路径(通常是我们的resources目录)
- 类的路径下的config文件夹(通常为我们的resources/config)
修改默认的配置文件名称
使用spring.config.name命令行属性,如下:将application修改为myproject。Spring Boot 将默认加载myproject.properties或myproject.yml文件
$ java -jar myproject.jar --spring.config.name=myproject
直接指定加载的配置文件
通过spring.config.location直接执行要加载的配置文件,多个配置文件之间用因为逗号隔开
$ java -jar myproject.jar --spring.config.location=\
optional:classpath:/default.properties,\
optional:classpath:/override.properties
建议非必要情况下不要修改配置文件的默认名称。(约定优于配置)
使用profile加载配置文件
我们使用spring.profiles.active属性来加载对应profile的配置文件,这样我们就可以针对不同的部署环境加载不同的配置了。再结合maven的profile配置进行配置文件的打包如下:
- 在主配置文件application.properties文件中如下配置
spring.profiles.active=@profileActive@
# profileActive是我们maven中profile配置的属性名称
- maven的配置如下
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
</profiles>
配置了2个profile环境,dev和test,而且默认使用dev环境
属性占位符
在我们的配置文件中,常常有多个属性的值类似,比如都有同一个前缀,每个属性都去配置一遍显得费事。这时候我们就可以使用属性占位符。
my.name = spring boot
my.say = Hello, ${my.name}
最后my.sal的值即为Hello, spring boot
总结
本章只是介绍了部分我们常用的配置方式,也没有详细介绍properties配置与yml配置的注意事项。不过我们日常的开发中以上这些就基本够用了。
上一篇:Spring Boot HelloWorld
下一篇:Spring Boot配置绑定