3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序
SpringBoot也可以从以下位置加载配置; 优先级从高到低
高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
1.命令行参数
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
指定访问的路径
多个配置用空格分开; --配置项=值
--
由jar包外向jar包内进行寻找;
优先加载带profile
--
其余的参考官方文档:
所有支持的配置加载来源
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config
2.自动配置原理
官方文档:
https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#common-application-properties
将类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中
每一个这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;
@Configuration //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件@EnableConfigurationProperties(HttpEncodingProperties.class) //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把HttpEncodingProperties加入到ioc容器中 @ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效; 判断当前应用是否是web应用,如果是,当前配置类生效 @ConditionalOnClass(CharacterEncodingFilter.class) //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器; @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) //判断配置文件中是否存在某个配置 spring.http.encoding.enabled;如果不存在,判断也是成立的//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;public class HttpEncodingAutoConfiguration {//他已经和SpringBoot的配置文件映射了private final HttpEncodingProperties properties;//只有一个有参构造器的情况下,参数的值就会从容器中拿public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {this.properties = properties;}@Bean //给容器中添加一个组件,这个组件的某些值需要从properties中获取@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?public CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));return filter;}
根据当前不同的条件判断,决定这个配置类是否生效?
一但这个配置类生效;这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取
的,这些类里面的每一个属性又是和配置文件绑定的;
5)、所有在配置文件中能配置的属性都是在xxxxProperties类中封装者‘;配置文件能配置什么就可以参照某个功能对应的这个属性类
@ConfigurationProperties(prefix = "spring.http.encoding") //从配置文件中获取指定的值和bean的属性进行绑定public class HttpEncodingProperties {public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
@Conditional
@Conditional派生注解(Spring注解版原生的@Conditional作用)
#开启springboot的debug debug=true
Positive matches:(自动配置类启用的) -----------------DispatcherServletAutoConfiguration matched:- @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)- @ConditionalOnWebApplication (required) found StandardServletEnvironment (OnWebApplicationCondition) Negative matches:(没有启动,没有匹配成功的自动配置类) -----------------ActiveMQAutoConfiguration:Did not match:- @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)AopAutoConfiguration:Did not match:- @ConditionalOnClass did not find required classes 'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice' (OnClassCondition)
转载于:https://www.cnblogs.com/Mrchengs/p/10120466.html
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)相关推荐
- 配置文件加载位置||外部配置加载顺序||自动配置原理
配置文件加载位置 SpringBoot会从这四个位置全部加载主配置文件:互补配置: 外部配置加载顺序 自动配置原理 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置 ...
- Spring boot外部配置加载顺序
外部配置加载顺序 Spring boot 可以从以下位置加载配置 优先级从高到低 高优先级的配置,覆盖低优先级的配置 所有的配置,会形成互补配置 官网,给出了17个位置 这里,只介绍常用的11个位置 ...
- 如何正确控制springboot中bean的加载顺序总结
1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...
- SpringBoot_配置-外部配置加载顺序
接下来我们再来看SpringBoot的一个特点,外部配置的加载顺序,也就是说,SpringBoot我们要写一些配置,配置可以写在我们的配置文件,application.properties,放到类路径 ...
- SpringBoot配置加载顺序
文章目录 前言 一.Spring Boot 配置优先级 二.命令行参数 示例 1 配置文件 示例 2 三.示例分析 前言 Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令 ...
- Spring Boot 配置加载顺序详解
使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...
- Spring Boot配置加载顺序
Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令行参数等多种形式进行配置.这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在 ...
- web.xml 配置 加载顺序
web.xml 的加载顺序是:context-param -> listener -> filter -> servlet . 过滤器执行顺序是根据filter-mapping ,不 ...
- Spring : Spring外部配置加载顺序
1.美图 2.概述 Spring Boot支持多种外部配置方式 这些方式优先级如下: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/ ...
最新文章
- C#模糊查询绑定datagridview
- php安装openssl 扩展
- RHEL(Red Hat Enterprise Linux)配置YUM源
- [WCF] - 使用 [DataMember] 标记的数据契约需要声明 Set 方法
- 【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)
- 阿里技术专家详解 DDD 系列- Domain Primitive
- python 输入框查询_Element输入框带历史查询记录
- 【mysql】期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)
- Flutter进阶第2篇:Dio库实现网络请求以及动态渲染数据
- c语言程序设计基础课本答案,c语言程序设计基础课后习题参考 答 案与解析.doc...
- VMware Fusion Pro v10.1.6 苹果虚拟机免费版及解锁许可证
- 访问局域网计算机切换用户,Win7切换用户账户访问共享文件夹的方法
- yum安装vsftpd时提示:另外一个程序锁定了 yum
- 区块链医疗平台搭建 高效的医疗管理生态服务体系
- Action Recognition with Improved Trajectories
- ubuntu8.04安装配置
- Abaqus应力结点数据导出与处理
- Mysql数据库操作语句总结(一)
- 基于HTML+CSS制作静态页面【剪纸文化15页】传统文化设计题材 dreamweaver制作静态html网页设计作业作品...
- JavaSE习题 用Java打印九九乘法口诀表