1. 程式人生 > >【spring】Spring Boot:定制自己的starter

【spring】Spring Boot:定制自己的starter

cat 交互 miss factor 如何 指定 boot.s 倉庫 dmi

概念

在學習Spring Boot的過程中,接觸最多的就是starter。可以認為starter是一種服務——使得使用某個功能的開發者不需要關註各種依賴庫的處理,不需要具體的配置信息,由Spring Boot自動通過classpath路徑下的類發現需要的Bean,並織入bean

步驟

引入spring boot 的配置

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

<!-- Optional dependencies -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<optional>true</optional>
</dependency>

<!-- @ConfigurationProperties annotation processing (metadata for IDEs) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

增加自動配置文件

@org.springframework.context.annotation.Configuration
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnBean(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public
class MybatisAutoConfiguration { }
  • 在src/main/resources目錄下新建META-INF文件夾,然後新建spring.factories文件,這個文件用於告訴Spring Boot去找指定的自動配置文件,因此它的內容是
  • # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

分析

正規的starter是一個獨立的工程,然後在maven中新倉庫註冊發布,其他開發人員就可以使用你的starter了。

常見的starter會包括下面幾個方面的內容:

  1. 自動配置文件,根據classpath是否存在指定的類來決定是否要執行該功能的自動配置。
  2. spring.factories,非常重要,指導Spring Boot找到指定的自動配置文件。
  3. endpoint:可以理解為一個admin,包含對服務的描述、界面、交互(業務信息的查詢)
  4. health indicator:該starter提供的服務的健康指標

在應用程序啟動過程中,Spring Boot使用SpringFactoriesLoader類加載器查找org.springframework.boot.autoconfigure.EnableAutoConfiguration關鍵字對應的Java配置文件。Spring Boot會遍歷在各個jar包種META-INF目錄下的spring.factories文件,構建成一個配 置文件鏈表。除了EnableAutoConfiguration關鍵字對應的配置文件,還有其他類型的配置文件:

  • org.springframework.context.ApplicationContextInitializer
  • org.springframework.context.ApplicationListener
  • org.springframework.boot.SpringApplicationRunListener
  • org.springframework.boot.env.PropertySourceLoader
  • org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
  • org.springframework.test.contex.TestExecutionListener

註意

  1. @ConditionalOnMissingBean的作用是:只有對應的bean在系統中都沒有被創建,它修飾的初始化代碼塊才會執行,用戶自己手動創建的bean優先

  2. Spring Boot starter如何找到自動配置文件(xxxxAutoConfiguration之類的文件)?

  • spring.factories:由Spring Boot觸發探測classpath目錄下的類,進行自動配置;
  • @Enable:有時需要由starter的用戶觸發*查找自動配置文件的過程。

【spring】Spring Boot:定制自己的starter