Springboot-yaml配置和自动配置原理分析

目录
  • 版本仲裁中心
  • 自动配置原理
  • yaml语法
    • 和@PropertySource注解一起使用
    • 和@ImportResource一起使用
    • 配置文件占位符
    • profile
    • 配置文件的加载顺序

版本仲裁中心

spring dependencies中帮我们依赖了很多常用的jar包, 导入这些jar包不需要版本号
如:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

自动配置原理

配置文件配置debug: true可以在控制台打印自动配置报告.可以打印所有的启动的自动配置和没有启动的自动配置类.

@SpringBootApplication
标注在某个类上, 说明这个类是springboot的主启动类.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {

@EnableAutoConfiguration: 开启自动配置, 所以我们不用手动做很多配置

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@ AutoConfigurationPackage
将主配置类所在的包下所有组件都会扫描到spring容器中.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({Registrar.class})
public @interface AutoConfigurationPackage {

AutoConfigurationImportSelector
通过@ import: 给容器中导入一个组件, 这个组件会加载所有的自动配置类, 如mysql, web等等
最终会到META-INF/spring.factories这个位置找所有的自动配置类加载到容器中. 这些自动配置类就把我们以前用spring做的一大堆配置给做掉了.

yaml语法

字面量

字符串默认不需要加引号, 加单引号和双引号有特殊用意

单引号特殊会转义, 如\n输出还是\n
双引号特殊字符不会转义, 如\n输出是一个空格
不加和加单引号一样, 都会转义

松散绑定

属性的写法驼峰和加中划线-或者下划线_一样, 转换到实体类都是驼峰式. 但是这种只能用在configurationProperties中, 不能用在@Value注解中使用

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

这个注解, 可以让yaml配置中自定义配置有提示

和@PropertySource注解一起使用

@PropertySource注解可以加载指定的其他文件

@PropertySource(value = "classpath:user.properties")

和@ImportResource一起使用

导入spring的配置文件, 让其生效

@ImportResource(locations={"classpath:mybatis.xml"})

配置文件占位符

${random.int} 使用yaml提供给的随机数
${server.port} 使用前面配置好的值
${server.name:你好} 没有值的话使用默认值

profile

激活指定不同的配置环境

命令行激活可以添加–spring.profiles.active=dev
虚拟机参数激活-Dspring.profiles.active=dev

配置文件的加载顺序

file: ./config/ 项目根路径下的config目录
file: ./ 项目根目录
classpath: config/
classpath: /
所有文件都会被加载到, 从上到下优先级从高到低, 高的会覆盖掉低的内容. 不同的配置都会生效, 互补.
也可以在部署项目时候通过–spring.config.location来改变配置文件位置. 项目中加载的配置文件和这里指定的配置文件互补.

以上就是Springboot-yaml配置和自动配置原理的详细内容,更多关于Springboot自动配置的资料请关注我们其它相关文章!

(0)

相关推荐

  • SpringBoot2.1.x,创建自己的spring-boot-starter自动配置模块操作

    一)spring-boot-starter命名规则 自动配置模块命名规则:xxx-spring-boot,如:aspectlog-spring-boot 启动器命名规则:xxx-spring-boot-starter,如:aspectlog-spring-boot-starter 如两者只有一个模块:建议以xxx-spring-boot-starter方式命名. springboot建议以xxx前缀的方式对自己的自动配置命名的. 二)spring-boot-starter条件注解 注解 说明 @

  • SpringBoot自动配置的实现原理

    一.运行原理 Spring Boot的运行是由注解@EnableAutoConfiguration提供的. @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({EnableAutoConfigurationImportSelector.class}) public @interface EnableAuto

  • 浅谈springboot自动配置原理

    从main函数说起 一切的开始要从SpringbootApplication注解说起. @SpringBootApplication public class MyBootApplication { public static void main(String[] args) { SpringApplication.run(MyBootApplication.class); } } @SpringBootConfiguration @EnableAutoConfiguration @Compon

  • SpringBoot集成Druid配置(yaml版本配置文件)详解

    maven 配置 <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency> <dependency&g

  • 全面解析SpringBoot自动配置的实现原理

    之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配置的功能,我们编写一个最简单的自动配置功能,大概的总结一下. 一,配置属性类 其实就是值对象注入的方式去配置一些Spring常用的配置,我们编写一个最简单的配置对象. @ConfigurationProperties(prefix = "hello") //@Component //如果这

  • springboot自动配置没有生效的问题定位(条件断点)

    Spring Boot在为开发人员提供更高层次的封装,进而提高开发效率的同时,也为出现问题时如何进行定位带来了一定复杂性与难度.但Spring Boot同时又提供了一些诊断工具来辅助开发与分析,如spring-boot-starter-actuator.本文分享一个基于actuator与IDEA条件断点来定位自动配置未生效的案例.望对类似问题分析与处理提供参考. 问题确认 在前文介绍的 Spring Boot从入门到实战:整合通用Mapper简化单表操作 中,我们对druid连接池做了自动配置,

  • Springboot-yaml配置和自动配置原理分析

    目录 版本仲裁中心 自动配置原理 yaml语法 和@PropertySource注解一起使用 和@ImportResource一起使用 配置文件占位符 profile 配置文件的加载顺序 版本仲裁中心 spring dependencies中帮我们依赖了很多常用的jar包, 导入这些jar包不需要版本号 如: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang

  • SpringBoot超详细讲解自动配置原理

    目录 SpringBoot自动配置原理 SpringBoot特点 1.依赖管理 A.父项目做依赖管理 B.开发导入starter场景启动器 C.可以修改默认版本号 2.自动配置 A.自动配好Tomcat B.自动配好SpringMVC C.默认的包结构 D.各种配置拥有默认值 E.按需要加载所有自动配置项 SpringBoot自动配置原理 了解SpringBoot自动配置原理 1.SpringBoot特点 2.容器功能 3.自动配置原理入门 4.开发技巧 SpringBoot特点 1.依赖管理

  • SpringBoot起步依赖和自动配置基本介绍

    目录 1.起步依赖 2.自动配置 1.起步依赖 概念起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起支持某一功能. 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能例子-搭建Web应用Spring+SpringMVC 我们需要添加许多依赖,还要考虑到不同依赖之间存在版本冲突的问题,一般搭建一个Web项目时需要导入以下依赖: <dependency> <groupId>

  • SpringBoot如何实现Tomcat自动配置

    目录 准备工作 我们知道SpringBoot的自动装配的秘密在 org.springframework.boot.autoconfigure 包下的 spring.factories 文件中,而嵌入Tomcat的原理就在这个文件中加载的一个配置类: org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration @Configuration @AutoConfigureOrde

  • springboot 排除redis的自动配置操作

    springboot 排除redis的自动配置 因为要配置一个redis链接,所以将系统自带的配置排除,分别是 RedisAutoConfiguration.class 和 RedisRepositoriesAutoConfiguration.class 两个自动配置类 需要注意的是: RedisRepositoriesAutoConfiguration 对 beanName 叫做 "redisTemplate" 的bean有依赖,需要一并排除 @SpringBootApplicati

  • SpringBoot开发实战之自动配置

    在介绍SpringBoot的自动配置之前,先了解下注解@Import的使用,SpringBoot的@Enable*开头的注解底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中,而@Import提供了以下4中用法: 直接导入Bean 通过配置类导入Bean 导入ImportSelector实现类,一般用于加载配置文件的类 导入ImportBeanDefinitionRegistrar实现类 下面来分别介绍这几种用法. 直接导入Bean就比较简单了,

  • SpringBoot DataSource数据源实现自动配置流程详解

    目录 一.重点概念 1.什么是DataSource数据源 2.数据库连接池 二.导入依赖 三.分析自动配置 1.DataSourceAutoConfiguration类 2.DataSourceTransactionManagerAutoConfiguration类 3.JdbcTemplateAutoConfiguration类 4.JndiDataSourceAutoConfiguration类 5.XADataSourceAutoConfiguration类 四.代码样例 一.重点概念 1

  • SpringBoot是如何实现自动配置的你知道吗

    目录 SpringBoot启动类: 步骤如下: 总结 SpringBoot启动类: @SpringBootApplication public class CommunityApplication { public static void main(String[] args) { SpringApplication.run(CommunityApplication.class, args); } } 进入@SpringBootApplication源码中: AutoConfigurationI

  • SpringBoot根据目录结构自动配置Url前缀方式

    目录 自定义RequestMappingInfo 通过接口的形式发现类 在很多其他框架中,比如Python的Flask.node.js的KOA,Controller要想能够响应前端的请求都需要我们主动去注册到应用程序上.而Spring不需要我们自己去注册,由Spring通过扫描注解的方式去主动发现. 自定义RequestMappingInfo Spring中的RequestMappingHandlerMapping专门来负责处理标注了@RequestMapping的控制器.创建一个类继承并覆盖其

  • SpringBoot Admin使用及心跳检测原理分析

    目录 介绍 使用 Server端 Client端 心跳检测/健康检测原理 原理 调试准备 客户端发起POST请求 服务端定时轮询 介绍 Spring Boot Admin是一个Github上的一个开源项目,它在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面,提供如下功能: 显示 name/id 和版本号 显示在线状态 Logging日志级别管理 JMX beans管理 Threads会话和线程管理 Tra

随机推荐