临时属性
如何使用
- 使用jar命令启动Springboot工程时可以使用临时属性替换配置文件中的属性,例如:java -jar 工程名.jar --属性名=值
- 当需要加多个临时属性时,使用空格分隔即可。
- 配置属性的优先级可见某个网站,可自行百度下。
- 临时属性必须是当前boot工程支持的属性,否则设置无效。
在idea下测试临时属性是否生效
带属性启动springboot程序,为程序添加运行属性
点击右上方启动类的配置,Edit configuration。我们会看到一个program arguments 这就是springboot启动类中的形参args。在其中属于启动参数即可。例如–server.port=8080
通过编程形式带参数启动springboot程序,为程序添加运行参数
在启动类中自己新建一个string类型的数组,将属性加入到该数组中。并将这个数组作为springapplication.run方法的第二个参数。
不携带参数启动springboot程序(为了安全性)
springapplication.run(XXXApplication.class);
配置文件四级分类
Springboot中4级配置文件
1级(工程路径config目录中配置文件):file : config/application.yml // 最高,服务于运维经理整体调控
2级(工程路径配置文件):file : application.yml // 服务于运维人员配置涉密线上环境
3级(项目类路径config目录中配置文件):classpath:config/application.yml // 服务于项目经理整体调控
4级(项目类路径配置文件):classpath: application.yml // 最低,服务于开发人员本机开发与测试
作用
1级与2级留作系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控
多层级配置文件中的属性采用叠加并覆盖的形式作用于程序。
自定义配置文件
springboot默认的配置文件名是application,那如果我们将application的名字改掉,它就不会生效了,我们如何使得自定义的配置文件生效呢?
- 在configuration里找到program arguments 使用配置临时属性的方式。此时的配置文件已经被定义成了ebank.properties或者ebank.yml。增加一个启动参数 --spring.config.name=ebank
除了根据文件名去找,还可以根据类路径去找文件。比如 –spring.config.location=classpath:/ebank.yml。
那如果我们配置多个配置文件的时候,此时用逗号分隔,并且生效的配置是最后一个。 - 单服务器项目:使用自定义配置文件需求较低
- 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
- 基于springcloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
多环境开发
首先在配置文件中要设置好各个环境的配置,然后在第一步应用环境。
那么怎么将多个环境区分开呢?-我们可以使用三个减号进行区分:—。注意底下有一个Document 就能看到现在正在编辑哪个环境以及总环境数目。
接下来我们得给各个环境取名字把,不然怎么应用呢? -通常生产环境取名prod,开发环境取名dev,测试环境取名test。如何配置呢?
spring.config.activate.on-profile=环境名
应用环境的配置如何书写呢?
spring.profiled.active=环境名
将多个环境的配置分散到单独的配置文件中,更有利于上线管理部署。例如application-prod.yml、application-dev.yml。
注意:properties文件多环境配置仅支持多文件格式,不支持写在一个配置文件中!!!
分组管理
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则比如:application-devDB.yml、application-devRedis.yml。
然后使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔。
spring:
profiles:
active:dev
include:devDB,devRedis,devMVC
注意点:当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效。
从springboot2.4版本开始使用group属性替代include属性,降低了配置书写量;示例如下:
spring:
profiles:
active: dev
group :
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
在实际使用中,使用group属性进行多环境配置更加便于线上维护管理。
如果maven配置的profile和springboot配置的profile不一致,这个时候谁的优先级更高呢?
- 我们知道springboot的项目时依赖于maven坐标的,也就是说springboot项目在某种程度上是依赖于maven的,所以这两者相比maven的优先级要更高一些。
- 如何在maven中设置多环境属性呢?如下
- 然后在springboot中引用maven属性,如下:
注意:想让哪个环境生效,activeByDefault属性就要写在哪个profile里。
- 执行maven打包指令,并在生成的boot打包文件,jar文件中查看对应信息。
- 如果想要activeByDefault生效,需要手动执行一下compile。也就是说pom.xml每次更新需要手动compile方可生效。