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
- 啓動類開啓掃描