1.自定义starter的作用
在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,比如阿里云oss存储的时候,我们需要一个工具类进行文件上传。我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,这样会非常麻烦。如果我们将这些可独立于业务代码之外的功配置模块封装成一个个starter,复用的时候只需要在 maven pom 中引用依赖即可,让 SpringBoot 为我们完成自动装配,提高开发效率。
2.自定义starter命名规范
SpringBoot提供的 starter 以 spring-boot-starter-xxx 的方式命名的。官方建议自定义的 starter 使用 xxx-spring-boot-starter 命名规则。以区分 SpringBoot 生态提供的 starter。如:mybatis-spring-boot-starter
3.自定义starter的步骤
现在就以自定义阿里云oss工具starter为例步骤如下:
- 新建两个maven模块
? (1)aliyun-oss-spring-boot-autoconfigure:自动配置核心代码
? (2)aliyun-oss-spring-boot-starter:管理依赖
-
在aliyun-oss-spring-boot-autoconfigure的pom文件中引入以下依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> <!-- no more than 2.3.3--> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies>
-
在aliyun-oss-spring-boot-autoconfigure的java里面的对应的包里新建三个文件
AliOSSProperties.java
package com.minqiliang; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("aliyun.oss") public class AliOSSProperties { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; /** * 获取 * @return endpoint */ public String getEndpoint() { return endpoint; } /** * 设置 * @param endpoint */ public void setEndpoint(String endpoint) { this.endpoint = endpoint; } /** * 获取 * @return accessKeyId */ public String getAccessKeyId() { return accessKeyId; } /** * 设置 * @param accessKeyId */ public void setAccessKeyId(String accessKeyId) { this.accessKeyId = accessKeyId; } /** * 获取 * @return accessKeySecret */ public String getAccessKeySecret() { return accessKeySecret; } /** * 设置 * @param accessKeySecret */ public void setAccessKeySecret(String accessKeySecret) { this.accessKeySecret = accessKeySecret; } /** * 获取 * @return bucketName */ public String getBucketName() { return bucketName; } /** * 设置 * @param bucketName */ public void setBucketName(String bucketName) { this.bucketName = bucketName; } }
AliOSSUtils.java
package com.minqiliang; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.web.multipa