什么是spring boot starter
Spring Boot Starter 是一种 Maven 或 Gradle 依赖,它能够轻松地将相关库和框架集成到 Spring Boot 应用程序中。Starter 是一种对常见依赖项和设置的易于复用的封装,它们通常被开发人员用于创建可插拔的 Spring Boot 应用程序。
你可以从 Spring 官网下载不同类型的 Starters,或者通过使用 Spring Initializr 在你的 Spring Boot 项目中添加 Starters。同时,你也可以编写自己的 Starter,用于封装自己的类库和框架,并帮助其他开发人员更容易地使用它们。
总之,Spring Boot Starter 是一种强大的工具,它可以让你快速构建强大的 Spring Boot 应用程序,减少开发和集成工作量,提高代码的可重用性和可维护性。
例如,当我们再需要调用其他项目或服务的http接口时。可能会使用到FeginCLient、WebCleint、HttpClient、RestTemplate等。这些接口或工具都可以实现不同服务http接口之间的调用,现在我们就可以使用httpClient来封装一个可以实现远程接口调用的Starter。
新建idea项目
新建spring boot starter项目时,和创建普通的idea项目一样File > New > Project。项目类型选择quikstart
新建完成后目录结构如下:
文件及目录说明:
- org.example.config 代码文件包
- META-INF 主要包含一个spring.factories文件,用于自动装配和加载 Spring Boot 应用程序的各种组件和功能。
- application.properties spring boot 启动加载文件
- pom 文件,maven构建文件以及相关依赖。
pom文件配置
这里需要引入spring-boot-starter和httpclient:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>springboot-test-starter</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>springboot-test-starter</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.5.4</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency></dependencies>
</project>
HttpClient
新建HttpClient类,该类利用CloseableHttpClient 接口实现。在HttpClient新建一个单例对象closeableHttpClient用来请求http接口。以及两个字符串属性prefix(服务器根路径http://xxx.com:port/)和path(请求接口的路径)。
HttpClient中使用execute方法实现http接口调用。
package org.example.config;import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;import java.io.IOException;public class HttpClient {private static CloseableHttpClient closeableHttpClient;private String path;private String prefix;public void createDefault(){closeableHttpClient = HttpClients.createDefault();}public CloseableHttpResponse execute() throws IOException {if(closeableHttpClient == null){closeableHttpClient = HttpClients.createDefault();}return closeableHttpClient.execute(new HttpGet(String.format("%s%s",prefix,path)));}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getPrefix() {return prefix;}public void setPrefix(String prefix) {this.prefix = prefix;}
}
HttpRequestProperties
该类用来加载项目中http.server开头的接口配置。
package org.example.config;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties("http.server")
public class HttpRequestProperties {private String ip;private String port;public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getPort() {return port;}public void setPort(String port) {this.port = port;}
}
HttpRequestFactory
该类为starter 的加载类,新建该类的同时还需要在spring.factories中添加如下配置:
该配置项用于声明 Spring Boot 自动配置的实现类。添加该配置后spring boot就会自动从HttpRequestFactory中加载组件。
HttpRequestFactory.java的详细实现:
package org.example.config;import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableConfigurationProperties(HttpRequestProperties.class)
public class HttpRequestFactory {@Beanpublic HttpClient getHttpClient(HttpRequestProperties properties){HttpClient client = new HttpClient();client.createDefault();client.setPrefix(String.format("http://%s:%s/",properties.getIp(), properties.getPort()));return client;}}
打包使用
使用maven的package命令即可把starter项目打成jar包。
打包完成后把springboot-test-starter-1.0-SNAPSHOT.jar添加到其他项目中,并且在springboot项目中添加如下配置即可使用:
http:server:# your server ipip: localhost # your server portport: 8081
使用方法:
注入httpClient:
@Autowired
private HttpClient httpClient;
调用http://localhost:8081/test 接口:
httpClient.setPath("/test");
CloseableHttpResponse response = httpClient.execute();
HttpEntity entity = response.getEntity();
String responseText = EntityUtils.toString(entity);