【spring】Spring Boot:定制自己的starter
阿新 • • 發佈:2017-12-01
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) publicclass 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會包括下面幾個方面的內容:
- 自動配置文件,根據classpath是否存在指定的類來決定是否要執行該功能的自動配置。
- spring.factories,非常重要,指導Spring Boot找到指定的自動配置文件。
- endpoint:可以理解為一個admin,包含對服務的描述、界面、交互(業務信息的查詢)
- 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
註意
-
@ConditionalOnMissingBean的作用是:只有對應的bean在系統中都沒有被創建,它修飾的初始化代碼塊才會執行,用戶自己手動創建的bean優先;
-
Spring Boot starter如何找到自動配置文件(xxxxAutoConfiguration之類的文件)?
- spring.factories:由Spring Boot觸發探測classpath目錄下的類,進行自動配置;
- @Enable:有時需要由starter的用戶觸發*查找自動配置文件的過程。
【spring】Spring Boot:定制自己的starter