也許你有一個內部庫包或一個在整個應用程序環境中經常使用的開源庫,若是要在多個Spring Boot應用程序中使用它,爲它建立一個Spring Boot啓動器可能會頗有用。spring
Spring Boot啓動器包含兩個模塊:bash
讓咱們看一下名爲@autoconfiguration的機制。這聽起來比實際更復雜。app
Spring Boot建議爲模塊命名模式:-spring-boot-autoconfigure,還要聲明咱們應該爲全部屬性添加前綴,以避免弄亂任何名稱空間。讓咱們尊重它。spring-boot
好比這裏咱們的模塊將命名爲request-logging-spring-boot-autoconfigure,幷包含兩個類 - @ Confiration類和一個屬性類,用於公開可在application.properties中配置的一些屬性。工具
讓咱們從pom開始吧。ui
<?xml version="1.0"?>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring-boot.version}</version>
<optional>true</optional>
</dependency>
複製代碼
前兩個依賴項是使用Spring Boot和自動配置類,spring-boot-configuration-processor是一個從@ConfigurationProperties建立元數據文件的工具spa
下面是配置屬性類code
@ConfigurationProperties(prefix = "com.requestlogging")
public class RequestLoggingProperties {
.....
}
複製代碼
下面一步定義RequestLoggingAutoConfiguration:咱們使用@EnableConfigurationProperties啓用屬性 並添加兩個條件:cdn
@ConditionalOnWebApplication表示只有Spring Boot應用程序是Web應用程序時才包含咱們的配置。
@ConditionalOnClass定義RequestContextLoggingFilter必須存在於類路徑才能包含配置它。
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass(RequestContextLoggingFilter.class)
@EnableConfigurationProperties(RequestLoggingProperties.class)
public class RequestLoggingAutoConfiguration {
@Autowired
private RequestLoggingProperties requestLoggingProperties;
@Bean
@Order(1)
@ConditionalOnMissingBean
public RequestContextLoggingFilter requestContextLoggingFilter() {
return new RequestContextLoggingFilter(requestLoggingProperties.getRequestHeaderId(),
requestLoggingProperties.getLogIdentifier());
}
}
複製代碼
若是Spring Boot包含了咱們這個配置,那麼若是@ConditionalOnMissingBean有效,它將初始化咱們的過濾器bean:new一個RequestContextLoggingFilter實例 。只有當咱們的Spring上下文中沒有bean存在,咱們的bean纔會被初始化。xml
使用autoconfigure模塊, Spring建議爲啓動器命名模式:-spring-boot-starter. 這裏咱們命名爲request-logging-spring-boot-starter:
<dependency>
<groupId>com.jdon</groupId>
<artifactId>request-logging-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
複製代碼
啓動器須要包含使此啓動器工做的全部活動依賴項,不然沒法工做。
這樣別人就能夠使用上面配置使用你的庫包了。