五、SpringBoot的Profiles讲解

什么是profile

举个例子。一般在开发项目的时候要有多个环境,如开发环境、测试环境、生产环境,他们的配置文件一般不同。当我们要向各个环境发布程序时,需要人工处理这些配置文件,这显然麻烦且易错。有了profile,一切问题就简单了

简单讲profile就是一组配置,不同profile提供不同组合的配置,程序运行时可以选择使用哪些profile来适应环境。

对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单

多环境配置文件

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

至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

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


下面,以不同环境配置不同的服务端口为例,进行样例实验。
针对各环境新建不同的配置文件
application-dev.properties、application-test.properties
application-dev.properties文件内容为

server.port=8082

application-test.properties文件内容为

server.port=8083

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

用配置文件指定默认的环境

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

spring.profiles.active=dev

spring.profiles.active可以为数组,如

spring.profiles.active=dev,test

指定了多个环境

使用命令行激活

测试不同配置的加载:

  • 执行java -jar xxx.jar,可以观察到服务端口被设置为8082,也就是默认的开发环境(dev)
  • 执行java -jar xxx.jar –spring.profiles.active=test,可以观察到服务端口被设置为8083,也就是测试环境的配置(test)

使用编程的方式激活

SpringApplication的入口点也提供了一个用于设置额外配置的Java API(比如,在那些通过spring.profiles.active属性生效的配置之上):

package com.lf;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
        applicationContext.getEnvironment().setActiveProfiles("dev");
    }
}

无条件的添加

spring.profiles.include属性可以用来无条件的添加生效的配置。

spring.profiles.include= proddb,prodmq

基于Java配置的profiles

Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。任何@Component或@Configuration都能被@Profile标记

@Configuration
@Profile("production")
public class ProductionConfiguration {
// ...
}

通过@ConfigurationProperties引用的文件亦可以被当作文件
来加载的。

总结

  • application.properties文件是必定要加载的,而且是先加载的,无论是通过哪种方式指定的。
  • 当加载完application文件之后才加载指定的profiles文件
  • 如果application文件和指定的profile文件有相同的配置或冲突的配置项,则以profile中的为基准
  • application文件中写通用的配置项,profile文件中写特定环境的配置项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值