Blogger Information
Blog 41
fans 0
comment 0
visits 25287
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
7、【网摘】Spring Boot Profile(多环境配置)
自由之上
Original
684 people have browsed it

在实际的项目开发中,一个项目通常会存在多个环境,例如,开发环境、测试环境和生产环境等。不同环境的配置也不尽相同,例如开发环境使用的是开发数据库,测试环境使用的是测试数据库,而生产环境使用的是线上的正式数据库。
Profile 为在不同环境下使用不同的配置提供了支持,我们可以通过激活、指定参数等方式快速切换环境。
多 Profile 文件方式
Spring Boot 的配置文件共有两种形式:.properties 文件和 .yml 文件,不管哪种形式,它们都能通过文件名的命名形式区分出不同的环境的配置,文件命名格式为:

  1. application-{profile}.properties/yml

其中,{profile} 一般为各个环境的名称或简称,例如 dev、test 和 prod 等等。

1、properties 配置

在 helloworld 的 src/main/resources 下添加 4 个配置文件:

  1. application.properties:主配置文件
  2. application-dev.properties:开发环境配置文件
  3. application-test.properties:测试环境配置文件
  4. application-prod.properties:生产环境配置文件


在 application.properties 文件中,指定默认服务器端口号为 8080,并通过以下配置激活生产环境(prod)的 profile。

  1. #默认端口号
  2. server.port=8080
  3. #激活指定的profile
  4. spring.profiles.active=prod

在 application-dev.properties 中,指定开发环境端口号为 8081,配置如下

  1. #开发环境
  2. server.port=8081

在 application-test.properties 中,指定测试环境端口号为 8082,配置如下。

  1. #测试环境
  2. server.port=8082

在 application-prod.properties 中,指定生产环境端口号为 8083,配置如下。

  1. #生产环境
  2. server.port=8083

重启 Spring Boot 主启动程序,控制台输出如下图。

Spring Boot 配置文件中指定激活profile
图1:在配置文件指定激活 prod Profile
通过上图可以看到,我们指定的生产环境(prod) Profile 生效了,且服务器端口为 8083。

2、yml 配置

与 properties 文件类似,我们也可以添加 4 个配置文件:

  1. application.yml:默认配置
  2. application-dev.yml:开发环境配置
  3. application-test.yml:测试环境配置
  4. application-prod.yml:生产环境配置

在 applcation.yml 文件中指定默认服务端口号为 8080,并通过以下配置来激活开发环境的 profile。

  1. #默认配置
  2. server:
  3. port: 8080
  4. #切换配置
  5. spring:
  6. profiles:
  7. active: dev #激活开发环境配置

在 application-dev.yml 中指定开发环境端口号为 8081,配置如下。

  1. #开发环境
  2. server:
  3. port: 8081

在 application-test.yml 中指定测试环境端口号为 8082,配置如下。

  1. #测试环境
  2. server:
  3. port: 8082

在 application-prod.yml 中指定生产环境端口号为 8083,配置如下。

  1. #生产环境
  2. server:
  3. port: 8083

重启 Spring Boot 主程序,查看控制台输出,如下图。

Spring Boot YAML profile
图2:YAML 文件激活 dev Profile
通过上图可以看到,我们指定的开发环境(dev) Profile 生效了,且服务器端口为 8081。

3、多 Profile 文档块模式

在 YAML 配置文件中,可以使用“—”把配置文件分割成了多个文档块,因此我们可以在不同的文档块中针对不同的环境进行不同的配置,并在第一个文档块内对配置进行切换。
以 helloworld 项目为例,修改 application.yml ,配置多个文档块,并在第一文档快内激活测试环境的 Profile,代码如下。

  1. #默认配置
  2. server:
  3. port: 8080
  4. #切换配置
  5. spring:
  6. profiles:
  7. active: test
  8. ---
  9. #开发环境
  10. server:
  11. port: 8081
  12. spring:
  13. config:
  14. activate:
  15. on-profile: dev
  16. ---
  17. #测试环境
  18. server:
  19. port: 8082
  20. spring:
  21. config:
  22. activate:
  23. on-profile: test
  24. ---
  25. #生产环境
  26. server:
  27. port: 8083
  28. spring:
  29. config:
  30. activate:
  31. on-profile: prod

重启 Spring Boot 主启动程序,查看控制台输出,如下图。

Spring Boot yml 多文档块激活 Profile
图3:Spring Boot yml 多文档块激活 Profile
通过上图可以看到,我们指定的测试环境(test) Profile 生效了,且服务器端口为 8082。

4、激活 Profile

除了可以在配置文件中激活指定 Profile,Spring Boot 还为我们提供了另外 2 种激活 Profile 的方式:
1、命令行激活
2、虚拟机参数激活

1、命令行激活

我们可以将 Spring Boot 项目打包成 JAR 文件,并在通过命令行运行时,配置命令行参数,激活指定的 Profile。
我们还以 helloworld 为例,执行以下 mvn 命令将项目打包。

  1. mvn clean package

项目打包完成,结果如下图。

Spring Boot 打包
图4:Spring Boot 打包结果
打开命令行窗口,跳转到 JAR 文件所在目录,执行以下命令,启动该项目,并激活开发环境(dev)的 Profile。

  1. java -jar helloworld-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

以上命令中,–spring.profiles.active=dev 为激活开发环境(dev)Profile 的命令行参数。
执行结果如下图。

Spring Boot 命令行激活 Profile
图5:Spring Boot 命令行激活 Profile

2、虚拟机参数激活

我们还可以在 Spring Boot 项目运行时,指定虚拟机参数来激活指定的 Profile。
以 helloworld 为例,将该项目打包成 JAR 文件后,打开命令行窗口跳转到 JAR 所在目录,执行以下命令,激活生产环境(prod)Profile。

  1. java -Dspring.profiles.active=prod -jar helloworld-0.0.1-SNAPSHOT.jar

以上命令中,-Dspring.profiles.active=prod 为激活生产环境(prod)Profile 的虚拟机参数。
执行结果如下图。


加入
QQ群:722461036
微信群:
一起督促、学习、练习、温习、复习 ~ ~ ~

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post