自定义一个springboot starter

这篇具有很好参考价值的文章主要介绍了自定义一个springboot starter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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.multipart.MultipartFile;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.UUID;
    
    /**
     * 阿里云 OSS 工具类
     */
    
    public class AliOSSUtils {
    
        private AliOSSProperties aliOSSProperties;
    
        public AliOSSProperties getAliOSSProperties() {
            return aliOSSProperties;
        }
    
        public void setAliOSSProperties(AliOSSProperties aliOSSProperties) {
            this.aliOSSProperties = aliOSSProperties;
        }
    
        /**
         * 实现上传图片到OSS
         */
        public String upload(MultipartFile file) throws IOException {
            String endpoint = aliOSSProperties.getEndpoint();
            String accessKeyId = aliOSSProperties.getAccessKeyId();
            String accessKeySecret = aliOSSProperties.getAccessKeySecret();
            String bucketName = aliOSSProperties.getBucketName();
            // 获取上传的文件的输入流
            InputStream inputStream = file.getInputStream();
    
            // 避免文件覆盖
            String originalFilename = file.getOriginalFilename();
            String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
    
            //上传文件到 OSS
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            ossClient.putObject(bucketName, fileName, inputStream);
    
            //文件访问路径
            String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
            // 关闭ossClient
            ossClient.shutdown();
            return url;// 把上传到oss的路径返回
        }
    
    }
    

    AliyunOssAutoConfigration.java

    package com.minqiliang;
    
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @EnableConfigurationProperties(AliOSSProperties.class)
    public class AliyunOssAutoConfigration {
    
        @Bean
        public AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties){
            AliOSSUtils aliossUtils = new AliOSSUtils();
            aliossUtils.setAliOSSProperties(aliOSSProperties);
            return  aliossUtils;
        }
    }
    
  • aliyun-oss-spring-boot-autoconfigure的resources文件加下新建META_INF/spring文件夹,然后再在spring文件夹里新建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,文件内容为AliyunOssAutoConfigration类的全类名,如下

    com.minqiliang.AliyunOssAutoConfigration
    
  • 在aliyun-oss-spring-boot-starter的pom文件里引入aliyun-oss-spring-boot-autoconfigure依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>com.minqiliang</groupId>
                <artifactId>aliyun-oss-spring-boot-autoconfigure</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    </dependencies>
    
  • 目录结构如下

  • 执行clean和install,把自定义的starter安装到本地仓库

  • 新建一个aliyun-starter-test模块,进行测试,目录结构如下:

  • UploadController.java

    package com.example.controller;
    
    import com.example.pojo.Result;
    import com.minqiliang.AliOSSUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    
    @RestController
    public class UploadController {
    
        @Autowired
        private AliOSSUtils aliOSSUtils;
    
        @PostMapping("upload")
        public Result upload(MultipartFile image) throws IOException {
            String url = aliOSSUtils.upload(image);
            return Result.success(url);
        }
    }
    

    Result.java

    package com.example.pojo;
    
    public class Result {
        private Integer code;//响应码,1 代表成功; 0 代表失败
        private String msg;  //响应信息 描述字符串
        private Object data; //返回的数据
    
        public Result() {
        }
    
        public Result(Integer code, String msg, Object data) {
            this.code = code;
            this.msg = msg;
            this.data = data;
        }
    
    
        //增删改 成功响应
        public static Result success(){
            return new Result(1,"success",null);
        }
        //查询 成功响应
        public static Result success(Object data){
            return new Result(1,"success",data);
        }
        //失败响应
        public static Result error(String msg){
            return new Result(0,msg,null);
        }
    
        /**
         * 获取
         * @return code
         */
        public Integer getCode() {
            return code;
        }
    
        /**
         * 设置
         * @param code
         */
        public void setCode(Integer code) {
            this.code = code;
        }
    
        /**
         * 获取
         * @return msg
         */
        public String getMsg() {
            return msg;
        }
    
        /**
         * 设置
         * @param msg
         */
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        /**
         * 获取
         * @return data
         */
        public Object getData() {
            return data;
        }
    
        /**
         * 设置
         * @param data
         */
        public void setData(Object data) {
            this.data = data;
        }
    
        public String toString() {
            return "Result{code = " + code + ", msg = " + msg + ", data = " + data + "}";
        }
    }
    
  • pom文件引入aliyun-oss-spring-boot-starter依赖

    <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>
            <dependency>
                <groupId>com.minqiliang</groupId>
                <artifactId>aliyun-oss-spring-boot-starter</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    </dependencies>
    
  • application.yml里配置自己的阿里云oss信息,如下

    aliyun:
      oss:
        endpoint: 填写自己的
        accessKeyId: 填写自己的
        accessKeySecret: 填写自己的
        bucketName: 填写自己的
    
  • 启动测试项目,使用postman上传一个文件,结果如下,说明starter配置成功文章来源地址https://www.toymoban.com/news/detail-453722.html

    {
        "code": 1,
        "msg": "success",
        "data": "https://tlias-manage.oss-cn-hangzhou.aliyuncs.com/8713ed3d-751c-4d54-8a64-239b1ccb0da4.jpg"
    }
    

到了这里,关于自定义一个springboot starter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot:手写一个 SpringBoot Starter

    声明:原文作者:yuan_404 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库 命名归约: 官方命名: 前缀:spring-boot-starter-xxx 比如:spring-boot-starter-web… 自定义命名: xxx-spring-boot-starter 比如:mybatis-spring-boot-starter 在IDEA中新建一

    2024年02月03日
    浏览(38)
  • 【实战】SpringBoot自定义 starter及使用

    各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter,比如gateway、feign、web、test等等的插件。当然,在实际的业务场景中也会有将第三方组件整合为starter供其他项目接入。那么,我们今天就分享一波SpringBoot自定义 Starter及使用。 SpringBoot starter简介 starter是

    2024年01月22日
    浏览(38)
  • 华为二面:SpringBoot如何自定义Starter?

    Spring Boot的自动配置机制为开发人员提供了一种轻松集成和配置各种功能的便捷方式。然而,随着项目的复杂性增加,更好地组织和分享通用功能变得至关重要。自定义Starter成为了理想的解决方案,旨在简化项目的依赖管理和自动配置,使开发者能够迅速而灵活地集成特定的

    2024年02月21日
    浏览(35)
  • SpringBoot自定义starter之接口日志输出

    本文灵感来源是一道面试题。 要求做一个可以复用的接口日志输出工具,在使用时引入依赖,即可使用。 可能用在多个项目中。 问题处理思路是,自定义一个SpringBoot的Starter,可以加入一些功能配置。核心使用自定义注解、Aspect切面来做。 用切面去切你的自定义注解即可。

    2024年02月08日
    浏览(47)
  • 【Springboot】| 从深入自动配置原理到实现 自定义Springboot starter

    Springboot starter 是SpringBoot的一个重要概念,是“一站式服务 (one-stop)”的依赖 Jar 包包含 Spring 以及相关技术(比如 Redis)的所有依赖提供了自动配置的功能,开箱即用提供了良好的依赖管理,避免了包遗漏、版本冲突等问题。 简单来说, Springboot starter 提供了一种自动配置的机制

    2024年02月11日
    浏览(39)
  • 如何优雅地创建一个自定义的Spring Boot Starter

    优雅永不过时,希望看完本文,你会觉得starter如此优雅! Spring Boot Starter是一种简化Spring Boot应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter,例如 spring

    2024年02月11日
    浏览(59)
  • SpringBoot自定义starter开发:IP计数业务功能开发

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感

    2024年04月16日
    浏览(36)
  • 手写一个starter来理解SpringBoot的自动装配

    自动装配是指SpringBoot在启动的时候会自动的将系统中所需要的依赖注入进Spring容器中 我们可以点开 @SpringBootApplication 这个注解来一探究竟 点开这个注解可以发现这些 我们点开 @SpringBootConfiguration 这个注解 可以发现实际上 @SpringBootApplication 这个其实是一个配置类 再点开 @En

    2024年01月23日
    浏览(42)
  • SpringBoot——原理(自动配置_案例(自定义阿里云文件上starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依赖,虽然springboot已经提供了很多的起步依赖,但是在实际项目开发中可能会用到和第三方的技术,不是所有第三方在springboot中都有收录。 比如之前文章中有用到过的阿里云OSS,阿里云并没有提供起步依赖,导致每次使用

    2024年02月06日
    浏览(46)
  • SpringBoot——原理(自动配置_案例(自定义阿里云文件上传starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依赖,虽然springboot已经提供了很多的起步依赖,但是在实际项目开发中可能会用到和第三方的技术,不是所有第三方在springboot中都有收录。 比如之前文章中有用到过的阿里云OSS,阿里云并没有提供起步依赖,导致每次使用

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包