Spring Boot——不同环境调用不同的配置文件解决方案

问题描述

我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。

多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在Spring Boot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。

官方文档

https://docs.spring.io/spring-boot/docs/2.3.3.RELEASE/reference/htmlsingle/#boot-features-profiles 

https://docs.spring.io/spring-boot/docs/2.3.3.RELEASE/reference/htmlsingle/#boot-features-external-config-profile-specific-properties

https://docs.spring.io/spring-boot/docs/2.3.3.RELEASE/reference/htmlsingle/#howto-set-active-spring-profiles

解决方案 

Spring Boot多环境配置

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

   application-dev.properties:开发环境

   application-test.properties:测试环境

   application-prod.properties:生产环境

 

激活Profiles方式

方法一:配置文件

application.properties或者application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

如:spring.profiles.active=test就会加载application-test.properties配置文件内容

application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置

application-{profile}.properties中配置各个环境不同的内容

方法二:命令行

命令行方式是一种外部配置的方式,在执行java -jar命令时可以通过--spring.profiles.active=test的方式进行激活指定的profiles列表。

java -jar xxx.jar --spring.profiles.active=dev 

针对各环境新建不同的配置文件application-dev.propertiesapplication-test.propertiesapplication-prod.properties

在这三个文件均都设置不同的server.port属性,如:dev环境设置为8080,test环境设置为9090,prod环境设置为80

application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置

测试不同配置的加载:

执行java -jar xxx.jar,可以观察到服务端口被设置为8080,也就是默认的开发环境(dev)

执行java -jar xxx.jar --spring.profiles.active=test,可以观察到服务端口被设置为9090,也就是测试环境的配置(test)

执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为80,也就是生产环境的配置(prod)

方法三:Java系统属性

Java系统属性方式也是一种外部配置的方式,在执行java -jar命令时可以通过-Dspring.profiles.active=test的方式进行激活指定的profiles列表。

使用方式如下所示:

java -Dspring.profiles.active=dev -jar xxx.jar 

注意:-D方式设置Java系统属性要在-jar定义。

方法四:环境变量

在程序代码的application.properties里的spring.profiles.active=uat不变

在本地的开发环境/IDE所在的电脑上设置spring.profiles.active=dev, 在开发服务器上也设置成dev

uat本地服务器上,设置spring.profiles.active=uat或者不设置它

prod生产服务器上,设置spring.profiles.active=prod

相同的jar或者war包,在不同的服务器上运行不同的环境, 不用再手动修改application.properties文件

Linux/MAC环境下

su root

vim ~/.bash_profile
source ~/.bash_profile

在~/.bash_profile里最后一行增加

export SPRING_PROFILES_ACTIVE=dev

Windows环境下

环境变量的配置方式请参考Java环境变量配置,新建一个名为SPRING_PROFILES_ACTIVE的系统环境变量,设置变量的值为dev即可。

系统变量的方式适用于系统下所部署统一环境的SpringBoot应用程序,如统一部署的都是prod环境的应用程序。

优先级

命令行 > Java系统属性 > 系统变量 > application.yml或application.properties配置文件>application-default.properties

参考文章

springboot 不同环境不同的配置

Spring Boot项目在多环境(开发、生产或测试环境)调用不同配置文件方式

Spring Boot spring.profiles.active 环境变量配置

SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”

SpringBoot激活profiles你知道几种方式?

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页