定制你的【Spring Boot Starter】,加速开发效率

这篇具有很好参考价值的文章主要介绍了定制你的【Spring Boot Starter】,加速开发效率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要: 本文将介绍如何创建一个自定义的 Spring Boot Starter,让您可以封装常用功能和配置,并在多个 Spring Boot 项目中共享和重用。

1. 简介

Spring Boot Starter 是 Spring Boot 框架中的一种特殊的依赖项,它用于快速启动和配置特定功能的应用程序。Starter 实际上是一个 Maven 或 Gradle 项目,它包含了一组预配置的依赖项、默认的配置信息和自动配置类,以帮助开发者快速集成和使用某项功能。

Spring Boot Starter 通常命名为 spring-boot-starter-*,例如 spring-boot-starter-web 用于启动基本的Web应用程序,spring-boot-starter-data-jpa 用于启动使用JPA的数据访问应用程序。

2.背景

在企业微服务开发中,每个微服务模块可能会有不同的异常处理和错误信息输出方式,这样会导致系统的一致性和可维护性下降。为了解决这个问题,您希望创建一个自定义的 Spring Boot Starter,用于统一处理异常和错误信息,并提供一致的错误响应格式。

3.需求

  1. 统一的异常处理:对于常见的异常类型(如 404、500),提供统一的异常处理方式,并返回一致的错误响应。

  2. 统一的错误响应格式:定义一致的错误响应格式,包括错误代码、错误消息、错误详情等信息。

  3. 可定制化:允许开发人员根据实际情况定制异常处理和错误响应的方式,以满足不同的业务需求。

4.实现

4.1.创建SpringBoot项目

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

创建完成后项目结构

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

4.2.添加相关依赖

这里需要注意的是,在build.gradle文件中,我们在这里引入了  id 'java-library'

plugins {
    id 'java'
    // 添加 maven-publish 插件 主要是为了发布项目到 Maven 仓库
    id 'maven-publish'
    // 应用 Java Library 插件,提供 Java 项目的基本构建功能
    id 'java-library'

}

group = 'org.sys_my_start'
version = '1.0-SNAPSHOT'
ext {
    springfoxVersion = '3.2.2'
}

// 配置发布任务
publishing {
    // 定义发布内容
    publications {
        // 定义一个 MavenPublication 类型的发布
        mavenJava(MavenPublication) {
            // 发布内容来源于 Java 组件
            from components.java
            // 定义 Maven 坐标信息
            groupId 'org.sys_my_start' // Maven 项目的组织或公司标识
            artifactId 'com_sys_my_start' // 项目在 Maven 仓库中的唯一标识
            version '1.0-SNAPSHOT' // 项目的版本号,表示开发中的版本
        }
    }
}

repositories {
    mavenCentral()
}

/*  api: 这个依赖声明范围表示该依赖项不仅仅对当前项目的编译和运行时可见,而且对于其他依赖于当前项目的项目也是可见的。
    换句话说,当一个项目依赖于当前项目时,它也将自动获得该依赖项。(也就是最外层的可以访问最内层所引入的依赖)
    上面引入这个 也是为了使用api 因为 gradle 7.0 以后默认不支持 compile语法了废弃了,所以我们这里需要使用api
    id 'java-library'
*/
dependencies {
    api "org.springframework.boot:spring-boot-starter-web:$springfoxVersion"
}

test {
    useJUnitPlatform()
}

4.3.编写Starter 主要逻辑

4.3.1.编写异常处理类

package com.sys.my.start.exception;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;

@ControllerAdvice
public class GlobalExceptionHandler {

    private final ExceptionHandlerProperties properties;

    @Autowired
    public GlobalExceptionHandler(ExceptionHandlerProperties properties) {
        this.properties = properties;
    }

    /**
     * 处理自定义异常
     * @param ex 自定义异常
     * @param request 请求
     * @return ResponseEntity 返回异常信息
     */
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleAnyException(Exception ex, WebRequest request) {
        if (properties.isEnabled()) {
            // 处理自定义异常, 返回异常信息
            ErrorResponse errorResponse = new ErrorResponse("500", ex.getMessage(), request.getDescription(false));
            return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
        } else {
            // 未启用全局异常处理 返回500
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

4.3.2.编写错误响应类

package com.sys.my.start.exception;

/**
 * 定义统一错误相应格式
 */
public class ErrorResponse {
    /**
     * 错误码
     */
    private String errorCode;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 错误详情
     */
    private String errorDetails;

    public ErrorResponse(String number, String message, String description) {
        this.errorCode = number;
        this.errorMessage = message;
        this.errorDetails = description;
    }

    public String getErrorCode() {
        return errorCode;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public String getErrorDetails() {
        return errorDetails;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public void setErrorDetails(String errorDetails) {
        this.errorDetails = errorDetails;
    }
}

4.3.3.编写扫描配置文件类

package com.sys.my.start.exception;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 扫描 exception-handler:
 *      enabled: true
 * 为true时,启用全局异常处理
 */
@Component
@ConfigurationProperties(prefix = "exception-handler")
public class ExceptionHandlerProperties {
    private boolean enabled;

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}

4.3.4.编写自动配置类

package com.sys.my.start.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;

import java.lang.invoke.MethodHandles;

/**
 * 自动配置类
 * 通过@Import导入相关文件
 * EnableAspectJAutoProxy开启AOP代理自动配置
 * @author 13723
 * @version 1.0
 * 2024/2/16 19:16
 */
@Configuration
@EnableAspectJAutoProxy(
		exposeProxy = true
)
@Import({ExceptionHandlerProperties.class})
public class ErrorHandlerAutoProxy {
	private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
}

4.3.5.编写spring.factories

# 通过SpringBoot的自动注入功能,扫描spring.factories,实现自动注入。
org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.sys.my.start.exception.ErrorHandlerAutoProxy

4.3.6.发布到本地gradle

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

5.测试

5.1.测试模块引入starter

注意 这里为了保证测试的service模块能够使用到 starter引入springboot依赖,也需要使用api进行调用

// sys_my_service 子项目中的 build.gradle
plugins {
    id 'java-library'
}
dependencies {
    // https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2
    /* json转换 */
    implementation 'com.alibaba.fastjson2:fastjson2:2.0.46'
    /* lombok */
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    /* 日志类 */
    api 'ch.qos.logback:logback-classic:1.4.14'
    /* 引入自定义jar包 */
    api  group: 'org.sys_my_start', name: 'com_sys_my_start', version: '1.0-SNAPSHOT'
}
sourceSets.main.resources {
    srcDirs = ['src/main/java']
    include '**/*.xml'
}

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

5.2.编写测试代码

/**
 * @author 13723
 * @version 1.0
 * 2024/2/16 13:32
 */
@RestController
@RequestMapping("/test")
public class TestController {
	private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

	@Resource
	private TestService testService;
	@RequestMapping("/hello")
	public String hello(){
		return testService.hello();
	}
}
/**
 * @author 13723
 * @version 1.0
 * 2024/2/16 13:33
 */

@Service
public class TestService {
	private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

	public String hello(){
		throw new RuntimeException("测试统一返回异常!");
	}
}

5.3.测试结果

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

定制你的【Spring Boot Starter】,加速开发效率,springboot,spring boot,java,后端

6.总结

6.1.好处

自定义 Starter 是在 Spring Boot 中实现代码模块化和功能封装的强大工具。它的优势和用途包括:

  • 模块化开发: 自定义 Starter 允许将应用程序的不同功能模块化,使得代码结构更清晰,易于维护和管理。
  • 功能封装: Starter 可以封装特定功能的代码和配置,使得其他开发人员可以轻松地集成和使用这些功能。
  • 提高开发效率: 使用自定义 Starter 可以加速新项目的开发过程,避免重复编写相似的代码,提高开发效率。
  • 标准化配置: Starter 可以定义标准化的配置方式,使得不同项目之间的配置更一致,降低了配置错误的可能性。

通过自定义 Starter,开发团队可以实现代码的复用和标准化,从而提高了代码的复用性和可维护性,降低了开发和维护成本。

6.2.结语

本文介绍了如何创建自定义的 Spring Boot Starter,并详细解释了其优势、用途以及如何提高代码复用性和可维护性。通过自定义 Starter,开发人员可以更轻松地构建模块化的应用程序,并在团队内部实现功能的共享和复用。

鼓励读者在实际项目中尝试创建自己的自定义 Starter,将通用的功能模块化,并通过开源社区与他人分享,促进技术的共享和交流。这将有助于提高团队的开发效率,加速项目的上线和迭代过程,推动软件开发行业的发展。文章来源地址https://www.toymoban.com/news/detail-825970.html

到了这里,关于定制你的【Spring Boot Starter】,加速开发效率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • springboot web创建失败,解决Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom

    jdk8不支持3.0以上的springboot版本,如果你在创建项目的时候用的是jdk8,那么我建议你在创建好项目之后自行再pom文件里降级,我刚开始接触springboot时,用的是jdk11,导入的springboot版本是2.7.1,然后弄了差不多半天都找不到原因,然后我就扩大了阿里云的搜索地址,自行在pom文

    2024年02月04日
    浏览(35)
  • springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱

    1、设置系统值 System.setProperty(“mail.mime.splitlongparameters”, “false”); 2、 在创建对象的时候定义编码格式(utf-8): MimeMessageHelper helper = new MimeMessageHelper(mes, true, “utf-8”); 3、 其次,在添加附件的时候,附件名是需要定义编码的 helper.addAttachment(MimeUtility.encodeWord(附件名,“utf-8”

    2024年02月15日
    浏览(46)
  • SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

    SpringBootWeb入门 我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族旗下的项目 Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选

    2024年02月12日
    浏览(41)
  • Spring Boot - spring-boot-starter

    spring-boot-starter 当学习Spring Boot时,可以通过一个完整的案例来理解和实践其基本概念和功能。以下是一个简单的Spring Boot Starter完整案例,展示了如何创建一个基本的Web应用程序: 首先,创建一个名为pom.xml的Maven项目文件,添加以下内容:idea或其他直接创建直接跳过!

    2024年02月09日
    浏览(32)
  • Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台 +支持二次开发定制

     提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含:录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发定制,源码交付。   Java版知识付费-轻松

    2024年02月15日
    浏览(32)
  • Spring Boot Starter Parent

    在这,您将学习了解 Spring Boot Starter Parent, 它是 Spring Boot 提供的父级 Pom 文件,旨在提供自动版本依赖管理,帮助我们轻松快速地进行 Spring Boot 开发。 通过 Spring Boot Starter Parent, 我们可以进行简单便捷地包依赖管理。在 Spring Boot 每一个发行版中, 均提供了该版本所兼容的依

    2024年02月08日
    浏览(28)
  • 自定义Spring Boot Starter

    Spring Boot starter 我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。在实际项目中一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们的必备知识。 starter介绍 spring boot 在配置

    2024年02月10日
    浏览(72)
  • Spring Boot Starter设计实现

    Starter 是 Spring Boot 非常重要的一个硬核功能。 通过 Starter 我们可以快速的引入一个功能或模块,而无须关心模块依赖的其它组件。关于配置,Spring Boot 采用“约定大于配置”的设计理念,Starter 一般都会提供默认配置,只有当我们有特殊需求的时候,才需要在 application.yaml 里

    2024年01月18日
    浏览(33)
  • shiro-spring-boot-starter针对不同Spring Boot版本

    对于Spring Boot 2.4.10,无法找到shiro-spring-boot-starter的2.7.2版本,这是一个错误的版本号。 shiro-spring-boot-starter针对不同Spring Boot版本,推荐使用的版本如下: Spring Boot 1.x - 使用版本1.4.1 Spring Boot 2.0.x - 使用版本1.5.3 Spring Boot 2.1.x - 使用版本1.6.0 Spring Boot 2.2.x - 使用版本1.7.0 Spring Boot 2.3

    2024年02月13日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包