也许你有一个内部库包或一个在整个应用程序环境中常用的开源库,如果要在多个Spring Boot应用程序中使用它,为它创建一个Spring Boot启动器可能会很有用。
比如这里我们的模块将命名为request-logging-spring-boot-autoconfigure,并包含两个类 - @ Confiration类和一个属性类,用于公开可在application.properties中配置的一些属性。
<?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创建元数据文件的工具
@ConfigurationProperties(prefix = "com.requestlogging")
public class RequestLoggingProperties {
.....
}
复制代码
下面一步定义RequestLoggingAutoConfiguration:我们使用@EnableConfigurationProperties启用属性 并添加两个条件:
@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());
}
}
复制代码
使用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> 复制代码
这样别人就可以使用上面配置使用你的库包了。