Spring Boot profile加载原理

  • Post author:
  • Post category:其他




Spring Boot的配置文件

Spring Boot中的配置文件,默认为application.properties 或 application.yml 或 application.yaml.

Spring Boot通过其自动配置的核心功能,动态加载开发者在配置文件中对相关功能的某些信息进行配置,从而方便了开发者对于相关功能的配置功能。

YAML 或 yml 格式配置文件,是Spring Boot 新加入的一种文件格式,关于它的介绍请查看我的博文

YAML使用



Spring Boot默认配置文件加载顺序以及优先级



项目内部加载顺序

Spring Boot默认情况下加载配置文件:

classpath: 根目录

classpath: 根下config/

file:当前目录

file:./config:当前目录config/

classpath:/,classpath:/config/,file:./,file:./config/ 加载优先级自低到高,高优先级相同内容会覆盖低优先级内容,不相同内容会形成互补效果。

ConfigFileApplicationListener.java

public class ConfigFileApplicationListener
		implements EnvironmentPostProcessor, SmartApplicationListener, Ordered {

	private static final String DEFAULT_PROPERTIES = "defaultProperties";

	// 默认配置文件加载目录,且优先级自低到高。
	// Note the order is from least to most specific (last one wins)
	private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

	// 默认配置文件名称
	private static final String DEFAULT_NAMES = "application";

	private static final Set<String> NO_SEARCH_NAMES = Collections.singleton(null);

	private static final Bindable<String[]> STRING_ARRAY = Bindable.of(String[].class)




项目外部配置文件加载顺序:

当我们项目已经打成jar包后,可能会碰到重新配置某些环境信息,又不想重新打jar包,Spring Boot支持在jar包外的配置文件使用,如下:

1.命令行参数

2.来自java:comp/env的JNDI属性

3.Java系统属性(System.getProperties())

4.操作系统环境变量

5.RandomValuePropertySource配置的random.*属性值

6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

10.@Configuration注解类上的@ImportSource

11.通过SpringApplication.setDefaultProperties指定的默认属性

由jar包外向jar包内的顺序进行扫描加载;

优先加载名称带有profile的,再加载不带profile。



自定义指定配置文件路径

通过以上我们可以发现,Spring Boot支持自定义配置扫描配置文件的路径,如下:

application-prod.yml

server:
      port: 8094

项目外,启动Spring Boot项目命令:

java -jar springboot-manual-1.0-SNAPSHOT.jar –spring.config.location=C:\Users\Desktop\test\application-prod.yml



java -jar -Dspring

在这里插入图片描述


注意:spring.config.location 或者spring.config.location在配置文件中均不生效,只有在命令行或虚拟机参数等才会生效。



Spring Boot 指定启动profile的方式

项目目录

Spring Boot 多个Profile环境配置,方便了开发人员灵活的配置运行环境,有以下几种方式:



命令行参数指定profile

将Spring Boot 打成jar包,命令行启动,uat 接口为8093。

java -jar springboot-manual-1.0-SNAPSHOT.jar –spring.profiles.active=uat

在这里插入图片描述



JVM虚拟机参数指定profile

在IDEA中点击Run–>Edit Configuration

VM options:-Dspring.profiles.active=uat

在这里插入图片描述



配置文件指定profile:

在application配置文件中增加以下:

spring:
  profiles:
    active: dev

在这里插入图片描述



操作系统环境变量 :

创建系统环境变量,例如:

spring.profiles.active -> SPRING_PROFILES_ACTIVE



版权声明:本文为xintonghanchuang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。