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

對象類型

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

  • 啓動類開啓掃描
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章