Spring Boot profile加载原理
文章目录Spring Boot的配置文件Spring Boot默认配置文件加载顺序以及优先级项目内部加载顺序项目外部配置文件加载顺序:自定义指定配置文件路径Spring Boot 指定启动profile的方式命令行参数指定profileJVM虚拟机参数指定profile配置文件指定profile:操作系统环境变量 :Spring Boot的配置文件Spring Boot中的配置文件,默认为ap..
文章目录
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
更多推荐
所有评论(0)