五、SpringBoot的Profiles讲解

来源:互联网 发布:数据脱敏 编辑:程序博客网 时间:2024/06/02 04:26

什么是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;@SpringBootApplicationpublic 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文件中写特定环境的配置项
0 0
原创粉丝点击