😧 SpringBoot(三)

简介: 😧 SpringBoot

2.4  多环境配置


以后在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。


网络异常,图片无法展示
|


来回的修改配置会很麻烦,而 SpringBoot 给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境开发的配置都不相同,接下来对不同类型的配置文件进行说明


2.4.1  yaml文件


application.yml 中使用 --- 来分割不同的配置,内容如下


#开发
spring:
  profiles: dev #给开发环境起的名字
server:
  port: 80
---
#生产
spring:
  profiles: pro #给生产环境起的名字
server:
  port: 81
---
#测试
spring:
  profiles: test #给测试环境起的名字
server:
  port: 82
---


上面配置中 spring.profiles 是用来给不同的配置起名字的。而如何告知 SpringBoot 使用哪段配置呢?可以使用如下配置来启用都一段配置


#设置启用的环境
spring:
  profiles:
    active: dev  #表示使用的是开发环境的配置
综上所述,application.yml 配置文件内容如下
#设置启用的环境
spring:
  profiles:
    active: dev
---
#开发
spring:
  profiles: dev
server:
  port: 80
---
#生产
spring:
  profiles: pro
server:
  port: 81
---
#测试
spring:
  profiles: test
server:
  port: 82
---

注意:


在上面配置中给不同配置起名字的 spring.profiles 配置项已经过时。最新用来起名字的配置项是


#开发
spring:
  config:
    activate:
      on-profile: dev


2.4.2  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


2.4.3  命令行启动参数设置


使用 SpringBoot 开发的程序以后都是打成 jar 包,通过 java -jar xxx.jar 的方式启动服务的。那么就存在一个问题,如何切换环境呢?因为配置文件打到的jar包中了。


我们知道 jar 包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成jar包就可以了。这种方式显然有点麻烦,而 SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式,如下


java –jar xxx.jar –-spring.profiles.active=test


那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式


java –jar xxx.jar –-server.port=88


当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下


java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test


大家进行测试后就会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实 SpringBoot 官网已经进行了说明,参见 :


https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config


进入上面网站后会看到如下页面


网络异常,图片无法展示
|


如果使用了多种方式配合同一个配置项,优先级高的生效。


2.5  配置文件分类


网络异常,图片无法展示
|


有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,如下


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


==说明:==级别越高优先级越高


2.5.1  代码演示


在这里我们只演示不同级别配置文件放置位置的优先级。


2.5.1.1  环境准备


创建一个名为 springboot_06_config_fileSpringBoot 工程,目录结构如下


网络异常,图片无法展示
|


resources 下创建一个名为 config 的目录,在该目录中创建 application.yml 配置文件,而在该配置文件中将端口号设置为 81,内容如下


server:
  port: 81


而在 resources 下创建的 application.yml 配置文件中并将端口号设置为 80,内容如下


server:
  port: 80


2.5.1.2  验证1级和2级的优先级


运行启动引导类,可以在控制台看到如下日志信息


网络异常,图片无法展示
|


通过这个结果可以得出类路径下的  下的配置文件优先于类路径下的配置文件。config


2.5.1.3  验证2级和4级的优先级


要验证4级,按照以下步骤完成


  • 将工程打成 jar
    点击工程的 package 来打 jar
    网络异常,图片无法展示
    |
  • 在硬盘上找到 jar 包所在位置
    网络异常,图片无法展示
    |
  • jar 包所在位置创建 config 文件夹,在该文件夹下创建 application.yml 配置文件,而在该配合文件中将端口号设置为 82
  • 在命令行使用以下命令运行程序


java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar


运行后日志信息如下

网络异常,图片无法展示
|

通过这个结果可以得出file:  下的配置文件优先于类路径下的配置文件。config


注意:


SpringBoot 2.5.0版本存在一个bug,我们在使用这个版本时,需要在 jar 所在位置的 config 目录下创建一个任意名称的文件夹

目录
相关文章
|
druid Java 关系型数据库
😧 SpringBoot(四)
😧 SpringBoot
104 0
|
XML 前端开发 Java
😧 SpringBoot(二)
😧 SpringBoot
89 1
|
XML Java 程序员
😧 Spring_day03(一)
😧 Spring_day03
104 1
|
运维 NoSQL Java
【笑小枫的SpringBoot系列】【十八】SpringBoot中的Properties配置
【笑小枫的SpringBoot系列】【十八】SpringBoot中的Properties配置
118 0
|
前端开发 Java 关系型数据库
😧 SpringBoot(一)
😧 SpringBoot
104 0
|
监控 Java 测试技术
😧 Spring_day03(四)
😧 Spring_day03
86 0
|
Java Maven 索引
😧 Spring_day01 ✅(四)
😧 Spring_day01 ✅
74 0
|
XML Java 关系型数据库
😧 Spring_day02 ✅(四)
😧 Spring_day02 ✅
64 0
|
XML Java Maven
😧 Spring_day02 ✅(二)
😧 Spring_day02 ✅
72 0
😧 Spring_day02 ✅(二)
|
开发框架 Java 数据库连接
😧 Spring_day01 ✅(一)
😧 Spring_day01 ✅
121 0