目录
  1. 1. 前言
  2. 2. 项目结构
  3. 3. springboot-starter
  4. 4. starter使用
自定义starter

前言

基于springboot框架开发越来越流行,开发过程中自动配置和各类starter必不可少,如果自定义配置类多个模块都需要使用,就需要拷贝多份代码,不利于后续配置代码的维护。解决方案是将配置类进行封装,多个模块以jar包形式引入,后续只需要对配置封装类进修改,自定义starter就是个很好的方式

项目结构

官方提供的starter,大多包含两个jar包: 一个starter——没有任何实现,只用来管理依赖(即实现这个starter的功能需要依赖哪些jar),一个autoconfigure——包含所有具体实现,包括自动配置类,及META-INF/spring.factories文件,本文示例自定义starter将两者进行了合并

springboot-starter

1、引入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

2、配置属性类

1
2
3
4
5
6
7
8
9
@Data
@ConfigurationProperties(prefix = "swagger")
public class SwaggerProperties {
private String title = "服务端接口文档";
private String version = "1.0";
private String tokenHeader = "token";
private Boolean enabled = false;
private String[] basePackages;
}

3、配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@Configuration
@ConditionalOnMissingBean(Docket.class)
@ConditionalOnClass(EnableSwagger2.class)
@EnableSwagger2
@EnableConfigurationProperties(SwaggerProperties.class)
public class SwaggerAutoConfig {

@Autowired
private SwaggerProperties swaggerProperties;

private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(swaggerProperties.getTitle())
.version(swaggerProperties.getVersion())
.build();
}

@Bean
public Docket docket() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
ticketPar
.name(swaggerProperties.getTokenHeader()).description("token")
.modelRef(new ModelRef("string"))
.parameterType("header")
.defaultValue("Bearer ")
.required(true)
.build();
pars.add(ticketPar.build());

// 配置扫描
Predicate<RequestHandler> or = null;
String[] basePackages = swaggerProperties.getBasePackages();
if (basePackages != null && basePackages.length > 0) {
Predicate<RequestHandler>[] predicates = new Predicate[basePackages.length];
for (int i = 0; i < predicates.length; i++) {
predicates[i] = RequestHandlerSelectors.basePackage(basePackages[i]);
}
or = Predicates.or(predicates);
}

ApiSelectorBuilder builder = new Docket(DocumentationType.SWAGGER_2)
.enable(swaggerProperties.getEnabled())
.apiInfo(apiInfo())
.select()
.paths(Predicates.not(PathSelectors.regex("/error.*")));
if (or != null) {
builder.apis(or);
}
return builder.build().globalOperationParameters(pars);
}
}

spring.factories(指定配置类全类名)

1
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.powersi.swagger2.SwaggerAutoConfig

starter使用

1、pom.xml引入依赖

1
2
3
4
5
     <dependency>
<groupId>com.powersi</groupId>
<artifactId>swagger2-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

2、application.yml配置

1
2
3
4
5
6
7
#swagger配置
swagger:
enabled: true
version: 1.0
token-header: token
# 扫描包名,多个包以逗号隔开
base-packages: com.powersi.kbs.controller
文章作者: 微光
文章链接: http://www.guduke.cn/2020/11/29/starter/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微光
打赏
  • 微信
  • 支付宝

评论