自学SpringBoot三之多环境配置——Profile

在真实的工作项目中,都是采用多环境的形式,代码相同但各自分离且互不相扰。例如开发人员使用的是开发环境,测试人员使用的是测试环境,而项目上线之后使用的则是生产环境。这个三个阶段,都有各自的配置文件,如果只是一个配置文件来回改会很容易出现错误和疏漏的。由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、数据库连接、Redis服务器地址等),导致实际生产的配置参数与测试服务器参数混淆,一旦在部署的时候某个参数忘记修改了,那么就必须重新打包部署,这确实让人感到非常头疼,因此springboot提供了很简单的解决办法——Profile。

一、什么是Profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活,指定参数等方式快速切换环境。

Spring中的Profile功能其实早在Spring 3.1的版本就已经出来,它可以理解为我们在Spring容器中所定义的Bean的逻辑组名称,只有当这些Profile被激活的时候,才会将Profile中所对应的Bean注册到Spring容器中。举个更具体的例子,我们以前所定义的Bean,当Spring容器一启动的时候,就会一股脑的全部加载这些信息完成对Bean的创建;而使用了Profile之后,它会将Bean的定义进行更细粒度的划分,将这些定义的Bean划分为几个不同的组,当Spring容器加载配置信息的时候,首先查找激活的Profile,然后只会去加载被激活的组中所定义的Bean信息,而不被激活的Profile中所定义的Bean定义信息是不会加载用于创建Bean的

二、如何使用Profile

简单的说,就是将原来三个环境都配置在同一个配置文件中,而使用了Profile之后,则变成了将三个环境的配置分别配置在三个不同的配置文件中,当实际运行的时候,九可以通过某个激活某个参数来使用某个环境的配置。此时spring容器只会加载被激活的那个配置,没被激活的则不会加载。这就从原来每次都需要更改一大篇的配置信息变成了如今只需更改一个参数就能达到目的了,大大的提升了开发的效率以及降低了出错率。

三、使用Profile的几种方式

1.多Profile文件

我们在主配置文件编写的时候,文件名可以写为application-{profile}.properties或者application-{profile}.yml

此处的profile表示的是一个需要传入的参数,参数是什么,spring容器就加载对应的配置文件。

项目目录结构:

application.properties(主配置),application-dev.properties(开发环境),application-product.properties(生产环境),

application-test.properties(测试环境),结构如下图所示。

一般情况下,若没有激活spring.profiles.active,spring默认只加载主配置文件,但只要在主配置文件中加入了这个参数,且为它赋予了对应的值,则spring会加载对应环境的配置文件。

话不多说看代码:

application.properties文件——这是没有激活spring.profiles.active

server.port=8080

启动项目之后的结果,可以看到启动的端口号是8080;

application.properties文件——这是激活了spring.profiles.active

server.port=8080
#值为dev,product,test则代表了不同的运行环境
spring.profiles.active=dev

启动项目之后的结果,可以看到启动的端口号正是我们在application-dev.properties文件配置的端口号,其他的以此类推。

application-dev.properties文件

server.port=8081

application-product.properties文件

server.port=8082

application-test.properties文件

server.port=8083

2.yml支持多文档块,更简洁的一种方式

在yml格式的文件中可以用三个短横线加换行(---)来区分不同的配置模块。当然要将之前的properties之中的配置注释掉,避免冲突。

application.yml文件,注意那三个短横线,将一个yml文件分割成了不同的模块

#主配置环境
server:
  port: 8080
#激活使用哪个环境,不激活则默认使用主配置环境
spring:
  profiles:
    active: dev

---
#dev环境
server:
  port: 8011
#定义属于具体的哪一个环境
spring:
  profiles: dev

---
#product环境
server:
  port: 8012
#定义属于具体的哪一个环境
spring:
  profiles: product

---
#test环境
server:
  port: 8013
#定义属于具体的哪一个环境
spring:
  profiles: test

启动项目的结果,正和我们所配置的一样

3.使用命令行参数激活指定的profile

使用命令行参数进行指定的优先级最高。此时即便我在主配置文件中激活的是dev环境,但只要我们的命令行参数的配置是其他的参数,则以命令行的参数配置为准。

看图:配置命令行参数——在Program arguments栏目中填上:--spring.profiles.active=test

则运行的将会是测试环境!

结果:

4.使用虚拟机参数

在VM options:-Dspring.profiles.active=product;命令行参数的配置优先级高于虚拟机参数

 

 

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值