一、多Profile文件
- yml支持多文档块方式
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
-
激活指定profile
-
在配置文件中指定 spring.profiles.active=dev
- 命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
- 虚拟机参数;
-Dspring.profiles.active=dev
二、配置文件加载位置
Spring Boot获取文件总的来说有三种方式
- @Value注解
- @ConfigurationProperties注解
- Environment接口
这三种注解可以配合着@PropertySource来使用,@PropertySource主要是用来指定具体的配置文件。
源码地址:透传地址
相关文章
三、自动配置原理 Spring Boot 的功能官网文档
(1)配置文件能配置的属性参照spring boot 2.2.5官网
可以在application.properties
文件内部application.yml
,文件内部或命令行开关中指定各种属性。本附录提供了常见的Spring Boot属性列表以及对使用它们的基础类的引用。
- Spring Boot提供了各种具有高级值格式的转换机制,请务必查看属性转换部分。
(2)自动配置的原理:
- Spring Boot启动的时候加载主配置类,开启了自动配置功能 @SpringBootApplication下的@EnableAutoConfiguration
- @EnableAutoConfiguration的作用:
利用 AutoConfigurationImportSelector 选择器给容器导入一些组件,具体可以查看源码:selectImports()方法的内容:
- 获取候选配置
// 获取候选配置
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
- 扫描所有jar包类路径下的 META-INF/spring.factories
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
this.getSpringFactoriesLoaderFactoryClass(),
this.getBeanClassLoader());
- 把扫描到的这些文件的内容包装成properties对象中
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
- 从Properties中获取到 EnableAutoConfiguration.class 类(类名)的值,然后把他们添加到容器中。
- 将类路径下的 META-INF/spring.factories 里面配置的所有 EnableAutoConfiguration的值加入到容器中。
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoC