SpringBoot入门:开发自定义的Spring-Boot-Starter

1、starter命名规范

spring提供的starter:

  • spring-boot-starter-xxx-x.y.z.jar
  • spring-boot-xxx-autoconfigure-x.y.z.jar

第三方提供的starter:

  • xxx-spring-boot-starter-x.y.z.jar

2、动手制作自定义Spring-Boot-Starter的步骤

1、新建项目,引入依赖
引入spring-boot-starter、spring-boot-autoconfigure、第三方jar,如果需要生成配置元信息,加入spring-boot-configuration-processor

2、编写功能实现类
3、编写自动配置类
4、在resources/META-INF/spring.factories中配置自动装配类
5、打包
这里我们使用jsoup抓取网页信息为例,制作一个starter。

项目结构:

2.1、新建maven项目,引入依赖

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
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath />
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>

</dependencies>

2.2、编写功能实现类

编写实现抓取网页内容的类

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
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class CrawlPageClient {

private String pageUrl;

private CrawlPageClient() {
}

public CrawlPageClient(String pageUrl) {
this.pageUrl = pageUrl;
}

public static CrawlPageClient of(String pageUrl) {
return new CrawlPageClient(pageUrl);
}

public String getPageUrl() {
return pageUrl;
}

public PageInfo getPageInfo() {
PageInfo pageInfo = new PageInfo();
try {
Document doc = Jsoup.connect(pageUrl).get();
pageInfo.setUrl(pageUrl);
pageInfo.setTitle(doc.title());
pageInfo.setContent(doc.html());
return pageInfo;
} catch (Exception e) {
e.printStackTrace();
}

return null;
}
}

网页信息类

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
public class PageInfo {
private String url;
private String title;
private String content;

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}
}

2.3、编写自动配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties( {PageProperties.class })
public class CrawlAutoConfigure {

@Bean
public CrawlPageClient create(PageProperties pageProperties) {
return CrawlPageClient.of(pageProperties.getPageUrl());
}
}

页面配置类,配置前缀:crawl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = PageProperties.CRAWL_PREFIX)
public class PageProperties {

public static final String CRAWL_PREFIX = "crawl";

private String pageUrl = "http://www.baidu.com";

public String getPageUrl() {
return pageUrl;
}

public void setPageUrl(String pageUrl) {
this.pageUrl = pageUrl;
}
}

默认抓取百度的页面内容

2.4、在resources/META-INF/spring.factories中配置自动装配类

1
2
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.river.springboot.CrawlAutoConfigure

2.5、打包

打成jar包: crawl-spring-boot-starter-1.0.jar,maven依赖信息:

1
2
3
4
5
<dependency>
<groupId>cn.river.springboot</groupId>
<artifactId>crawl-spring-boot-starter</artifactId>
<version>1.0</version>
</dependency>

3、测试自定义starter

最后,新建测试项目测试自定义的starter。

引入依赖:

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
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath />
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!-- spring-boot crawl -->
<dependency>
<groupId>cn.river.springboot</groupId>
<artifactId>crawl-spring-boot-starter</artifactId>
<version>1.0</version>
</dependency>

</dependencies>

新建测试类:

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
import cn.river.springboot.CrawlPageClient;
import cn.river.springboot.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("crawl")
public class CrawlController {

@Autowired
private CrawlPageClient crawlPageClient;

@GetMapping("")
@ResponseBody
public PageInfo crawlPageInfo() {
StringBuilder pageBuilder = new StringBuilder();
pageBuilder.append("抓取到").append(crawlPageClient.getPageUrl())
.append("网页的信息<br/>").append(crawlPageClient.getPageInfo());
System.out.println(crawlPageClient.getPageInfo());
return crawlPageClient.getPageInfo();
}
}

运行程序,浏览器输入:http://127.0.0.1:8080/crawl

默认看到的是百度网页的信息:

我们在application.properties配置中加入以下配置:

1
crawl.page-url=https://www.csdn.net

抓取网页改成csdn的,再次运行程序,访问内容如下:

4、总结

本文简单介绍如何开发自定义的Spring-Boot-Starter,通过添加依赖自动完成功能导入,使用起来很方便,大家也可以自己动手实现自定义的starter。


SpringBoot入门:开发自定义的Spring-Boot-Starter
https://river106.cn/posts/60eab5de.html
作者
river106
发布于
2020年6月20日
许可协议