一、多环境配置
开发环境、测试环境、生成环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装mysql,连接自己电脑上的mysql即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。
来回的修改配置会很麻烦,而SpringBoot给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境的配置都不相同,接下来对不同类型的配置文件进行说明。
yaml文件
在application.yml中使用---来分隔不同的属性,内容如下:
#开发 spring: profies: dev #给开发环境起的名字 server: port: 80 --- #生产 spring: profiles: pro #给生产环境起的名字 server: port: 81 --- #测试 spring: profiles: test #给测试环境起的名字 server: port: 82 ---
上面配置中spring-profiles是用来给不同的配置起名字的。可以使用如下配置来启用一段配置
#设置启用的环境 spring: profiles: active: dev #表示使用的是开发环境的配置
综上所述,application.yml配置文件内容如下
#设置启用的环境 spring: profiles: active: dev --- #开发 spring: config: activate: on-profile: dev server: port: 80 --- #生产 spring: profiles: pro server: port: 81 --- #测试 spring: profiles: test server: port: 82 ---
注意:
上面配置中给不同配置起名字的spring.profiles配置项已经过时,最新用来起名字的配置项是
#开发 spring: config: activate: on-profile: dev
properties文件
properties类型的配置文件配置多环境需要定义不同的配置文件
application-dev.properties是开发环境的配置文件,我们在该文件中配置端口号80
server.port=80
application-test.properties是测试环境的配置文件,我们在该文件配置端口号81
server.port=81
application-pro.properties是生产环境的配置文件,我们在该文件中端口号为82
server.port=82
SpringBoot只会默认加载名为application.properties的配置文件,所以需要在application.properties配置文件中设置启用哪个配置文件,配置如下:
spring.profiles.active=pro
命令启动参数设置
使用SpringBoot开发的程序以后都是打成jar包的,可以通过如下设置指定jar的运行环境:
jave -jar xxx.jar --spring.profiles.active=test
也可以通过如下方式修改临时端口:
java -jar xxx.jar --server.port=88
同时设置多个配置,比如指定启用哪个环境配置,又临时指定端口,如下:
java -jar springboot.jar --server.port=88 --spring.profies.active=test
在测试后会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实SpringBoot官网已经进行了说明,参见:
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-
features-external-config
进入官网后会看到如下页面
如果使用了多种方式配合同一个配置项,优先级高的生效。
二、配置文件分类
有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,如下:
java -jar springboot.jar --spring.profiles.active=test --server.port=85 --server.servlet.context=path=/heima --server.tomcat.connection-timeout=-1.....
针对这种情况,SpringBoot定义了配置文件不同的放置的位置,而放置不同位置的优先级时不同。
SpringBoot中4种配置文件放置位置:
1级:
classpath:application.yml
2级:
classpath:config/application.yml
3级:
file:application.yml
4级:
file:config/application.yml
说明:级别越高优先级越高
注意:
SpringBoot2.5.0版本存在一个bug,我们在使用这个版本四,需要在jar所在位置的config目录下创建一个任意名称的文件夹