SpringBoot(三)配置文件(yml)和自动化配置原理

SpringBoot 配置文件

配置文件的两种分类

  • application.properties
  • application.yml

properties配置格式

栗子:

server.port=8080
server.servle.context-path= /api

yml配置格式

栗子:

server:
  servlet:
  context-path: /api
port: 9000

更加推荐yml更加简洁清晰而且能少写不少代码,开发中不要写两种,properties会覆盖yml

yml的语法规则

yml介绍

  • 是一个标记语法 主要是用来配置文件
  • 以数据为中心,比xml和json更加合适作为配置文件

基础语法

key:(空格)value

说明

  • 以空格的缩进方式表示层级关系
  • 同一级要左对齐
  • 大小写是敏感的
server:
  servlet:
    context-path: /api
  port: 9000

值得类型

  • 基本类型
  • 对象
  • 数组

基本类型

name: 一个人
age: 19
price: 1154.256

对象类型

扫描二维码关注公众号,回复: 9952164 查看本文章
user:
  name: 那个人
  age: 18
  price: 1865.24
  
  
  #也可以在行内 user: {name: 那个人}

数组

address: 
  - 广州
  - 东莞
  - 北京
  - 深圳

一定要保证层级关系就是用空格

如何获取配置文件的value

  • @value 获取单个值
  • @ConfigurationProperties 获取这个对象的值

如果想使用@ConfigurationProperties这个注解必须导入 configuration-processor

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

2.11之后需要在pom文件中添加依赖

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
</dependency>

自动化配置(原理)

  • @SpringBootApplication 告诉springboot 是程序的启动类

@SpringBootApplication注解

  • @Configuration + @EnableAutoConfiguration + @ComponentScan = @SpringBootApplication注解

源码

@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 {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}

自动配置的原理

@EnableAutoConfiguration 自动化配置核心类

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

主要作用是自动化在程序的所有配置(预定由于配置的实现)

具体步骤 AutoConfigurationImportSelector

  • 调用selectImports方法
  • selectImports调用了getConfigurations方法
  • List configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
  • META-INF/spring.factories 找到你的对应配置文件,找到隐射java配置文件,把配置文件传入进去

springboot 数据整合

常用的数据访问整合

  • jdbc的整合
  • jpa的整合
  • mybatis的整合

配置完配置文件后一定要记得在包下创建config,声明第三方的类
类上使用@Configuration
方法上要使用@Bean,方法一定要返回对象

mybatis的整合

  • 配置yml文件

mybatis

  • 启动类开启扫描
发布了56 篇原创文章 · 获赞 3 · 访问量 4441

猜你喜欢

转载自blog.csdn.net/Tang_5253/article/details/101095629