自定义 spring boot starter 三部曲之二:实战开发

开发一个简单的spring-boot-starter 手写一个简单的spring boot starter 阅读详情

前言

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

  • 本文是《自定义 spring boot starter 三部曲》的第二篇,上一篇中我们通过学习 spring cloud 的 starter,对 spring boot 的 starter 有了初步了解,也设计好了实战内容,今天就来一起实现;

本章内容概述

  1. 创建工程 customizestarter;
  2. 创建模块 customizeapi;
  3. 创建模块 addservice;
  4. 创建模块 minusservice;
  5. 创建模块 customizeservicestarter;
  6. 构建工程 customizestarter,并安装到本地 maven 仓库;
  7. 创建工程 customizestartertestdemo;
  8. 构建工程 customizestartertestdemo,得到 jar 包;
  9. 启动 customizestartertestdemo 工程的 jar 包,并带上一个启动参数,验证支持负数的减法服务;
  10. 启动 customizestartertestdemo 工程的 jar 包,验证不支持服务的减法服务;

源码下载

  • 您也可以选择直接从 GitHub 下载 customizestarter 和 customizestartertestdemo 这两个工程的源码,地址和链接信息如下表所示:

  • 这个 git 项目中有多个文件夹,本章源码分别在 customizestarter 和 customizestartertestdemo 这两个文件夹下,如下图红框所示:

  • 接下来开始开发吧;

创建工程 customizestarter

  • 创建一个名为 customizestarter 的 maven 工程,以**spring-boot-starter-parent</font>作为父工程,同时自身又是后续几个模块的父工程,pom.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
复制代码

创建模块 customizeapi

  • 在工程 customizestarter 下创建模块 customizeapi,这是个 java 工程,里面是加法和减法服务的接口,和一个业务异常的定义;
  • customizeapi 的 pom.xml 内容如下,很简单,只有基本定义:

<?xml version="1.0" encoding="UTF-8"?>
复制代码

  • 异常定义类:

package com.bolingcavalry.api.exception;
复制代码

  • 加法服务的接口类 AddService:

package com.bolingcavalry.api.service;
复制代码

  • 减法服务定义类,注意减法 API 声明了异常抛出,因为如果已经配置了不支持负数的减法服务,那么被减数如果小于减数就抛出异常:

package com.bolingcavalry.api.service;
复制代码

创建模块 addservice

  • 在工程 customizestarter 下创建模块 addservice,这是个 java 工程,里面包含了加法相服务的实现,pom.xml 内容如下,注意由于要实现加法接口,因此需要依赖模块 customizeapi:

<?xml version="1.0" encoding="UTF-8"?>
复制代码

  • 加法接口的实现类 AddServiceImpl 很简单,如下:

package com.bolingcavalry.addservice.service.impl;
复制代码

创建模块 minusservice

  • 在工程 customizestarter 下创建模块 minusservice,这是个 java 工程,里面包含了减法相服务的实现,pom.xml 内容如下,注意由于要实现减法接口,因此需要依赖模块 customizeapi:

<?xml version="1.0" encoding="UTF-8"?>
复制代码

  • 一共有两个减法接口的实现类,第一个不支持负数结果,如果被减数小于减数就抛出异常 MinusException:

package com.bolingcavalry.minusservice.service.impl;
复制代码

  • 第二个减法接口的实现类支持负数返回:

package com.bolingcavalry.minusservice.service.impl;
复制代码

创建模块 customizeservicestarter

  • 在工程 customizestarter 下创建模块 customizeservicestarter,这是个 java 工程,里面需要依赖 spring boot 配置相关的库,由于要在配置中实例化加法和减法服务的实现,因此 customizeapi、addservice、minusservice 这些模块都要在 pom.xml 中声明依赖,如下:

<?xml version="1.0" encoding="UTF-8"?>
复制代码

  • 创建配置类 CustomizeConfiguration,注意 getSupportMinusService 和 getNotSupportMinusService 这两个方法上的注解配置,如果环境变量**com.bolingcavalry.supportnegative</font>存在并且等于 true,那么 getSupportMinusService 方法就返回了 MinusService 接口的实例,如果当前环境没有 MinusService 接口的实例,就由 getNotSupportMinusService 方法就返回一个,并且有会在控制台打印创建了哪种实现:

package com.bolingcavalry.customizeservicestarter;
复制代码

  • 在 src\main\resources 目录下创建一个目录**META-INF</font>,里面创建一个文件 spring.factories,内容是如下,表示如果当前应用支持 spring boot 的自动配置,就会被 spring boot 框架实例化并注册到 spring 容器内:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.bolingcavalry.customizeservicestarter.CustomizeConfiguration
复制代码

构建工程 customizestarter

  • 到这里 customizestarter 工程的编码就结束了,在工程内 pom.xml 所在目录(也就是 customizestarter 内的第一层目录),执行以下命令可以编译构建并安装到本地 maven 仓库:

mvn clean install -Dmaven.test.skip=true -U
复制代码

  • 如果编译构建和安装都成功了,可以看到类似如下输出:

[INFO] Installing C:\temp\201810\07\customizestarter\customizeservicestarter\pom.xml to C:\Users\12167\.m2\repositor
复制代码

  • 现在 starter 已经准备好了,我们做一个 spring boot 的 web 应用来验证一下;

创建工程 customizestartertestdemo

  • 工程 customizestartertestdemo 是个简单的 spring boot 应用,pom.xml 如下,可见并无特别之处,只是多了 customizeservicestarter 的依赖:

<?xml version="1.0" encoding="UTF-8"?>
复制代码

  • 开发一个 Controller 类,用于调用 AddService 和 MinusService 对应的服务:

package com.bolingcavalry.customizestartertestdemo.controller;
复制代码

  • 启动类如下:

package com.bolingcavalry.customizestartertestdemo;
复制代码

构建工程 customizestartertestdemo

  • 在 customizestartertestdemo 工程的 pom.xml 所在目录下执行以下命令即可构建成功:

mvn clean package -Dmaven.test.skip=true
复制代码

  • 命令执行成功后,即可在 target 目录下见到 customizestartertestdemo-0.0.1-SNAPSHOT.jar 文件,如下图:

  • 现在编码和构建已经全部完成,我们可以来验证了;

验证支持负数的减法服务

  • 在 customizeapi 模块的 CustomizeConfiguration 类中,有如下方法和注解:

@Bean
复制代码

  • 从上述代码可见,只要环境变量"com.bolingcavalry.supportnegative"等于 true,注册到 spring 容器的就是 MinusServiceSupportNegativeImpl 类的实例;
  • customizestartertestdemo-0.0.1-SNAPSHOT.jar 文件所在目录下,执行以下命令启动应用:

java -Dcom.bolingcavalry.supportnegative=true -jar customizestartertestdemo-0.0.1-SNAPSHOT.jar
复制代码

  • 在控制台中可以看见**create minusService support minus</font>,表示注册到 spring 容器的是 MinusServiceSupportNegativeImpl 类的实例,如下所示:

2018-10-14 12:04:54.233 INFO 16588 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
复制代码

  • 在浏览器访问 http://localhost:8080/minus/1/2,可见返回计算结果为负数:

验证不支持负数的减法服务

  • 前面已经分析过,CustomizeConfiguration 类的 getNotSupportMinusService 方法执行的条件是环境变量"com.bolingcavalry.supportnegative"等于 true,如果没有这个环境变量,getNotSupportMinusService 方法就不会执行,spring 容器中就没有 MinusService 接口的实例;
  • CustomizeConfiguration 类中,有如下方法和注解:

@Bean
复制代码

  • 从上述代码可见,spring 容器中如果没有 MinusService 接口的实例,getNotSupportMinusService 方法就会被执行,在 spring 容器中注册 MinusServiceNotSupportNegativeImpl 实例;
  • 因此接下来的我们启动的应用如果没有环境变量"com.bolingcavalry.supportnegative",就可以使用到不支持负数的减法服务了;
  • 停掉之前启动的应用,然后执行以下命令启动应用:

java -jar customizestartertestdemo-0.0.1-SNAPSHOT.jar
复制代码

  • 在控制台中可以看见**create minusService not support minus</font>,表示注册到 spring 容器的是 MinusServiceNotSupportNegativeImpl 类的实例,如下所示:

2018-10-14 12:15:05.994 INFO 16608 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
复制代码

  • 在浏览器访问 http://localhost:8080/minus/1/2,由于 MinusServiceNotSupportNegativeImpl 实例不支持负数减法,会直接抛出异常,如下图:

  • 至此,自定义 spring boot starter 的编码实战就完成了,希望本篇可以给您用来作参考,助您做出自己所需的 starter;
Spring Boot Starter机制解析与自定义开发实战 Spring Boot Starter是现代化Java开发中的核心依赖管理机制,基于约定优于配置原则实现组件自动装配。其技术原理主要依靠条件注解(如@ConditionalOnClass)和spring.factories文件实现智能配置加载,通过BOM管理确保依赖版本兼容性。这种机制大幅提升了开发效率,使开发者能够快速集成数据库连接、Web服务等常见功能模块。在微服务架构中,自定义Starter可封装通用能力如短信服务、支付网关等,实现配置代码复用。本文以短信服务Starter为例,详解从自动配置类编写到 阅读详情

相关推荐

Spring Boot之Starter依赖

在Spring Boot中,Starter依赖是一个非常重要的概念,它极大地简化了Spring应用的配置和依赖管理。Starter依赖本质上是一组方便的依赖描述符,你可以将它们添加到你的项目中,以获得Spring Boot对特定技术的支持。这些依赖描述符包含了所有你需要开始使用某个技术所需的库,并且已经通过合理的默认配置进行了设置。

一个老Java开发的自白 2027

SpringBoot自定义starter开发详细步骤说明

springboot的自定义starter开发的步骤以及详细说明

SeeYouAgain的博客 3999

自定义Spring Boot Starter深度解析:从零到一的完整实战指南

面试官:小李,你在项目中有没有遇到过需要自定义Spring Boot Starter的场景?候选人:有的,我们公司有一些通用的组件,比如统一的日志处理、权限验证、数据库连接池配置等,每个项目都要重复配置,所以我们就想着封装成starter…面试官:不错,那你能具体说说是怎么实现的吗?starter的工作原理你了解吗?候选人:额…就是把代码打成jar包,然后其他项目引入依赖就能用了…面试官:看来你对starter的表面功能了解得不错,但是对底层机制还不够深入。

weixin_54726354的博客 883

SpringBoot自己开发一个starter

SpringBoot自己写一个Starter,SpringBoot

weixin_60523038的博客 2435

Spring Boot如何自定义Starter开发?

🏆本文收录于《滚雪球学Spring Boot》,专门攻坚指数提升,2025 年国内最系统+最强(更新中)。    本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 1310

UE4入门实例17(Unreal制作卡通Post Process材质球)

效果展示 #1 创建Post Porcess材质球 #2 编写Shader功能 #3 设置场景区域内风格化渲染 #1 创建Post Porcess材质球 #2 编写Shader功能 创建基础效果 移除现有通道渲染 设置视图渲染范围 #3 设置场景区域内风格化渲染 #4 加群下载Shader源码:284105567 ...

Unity3d 攻城师一枚 1346

[Spring Boot Starter系列]spring-boot-starter组件自定义开发及应用

为什么自定义spring-boot-starter组件?我们以该问题作为切入点进行分析。当然,每个人有自己不同的理解,这里仅结合我所接触的业务进行分享:1、使用自定义starter组件之前:在我们还没有使用自定义stater组件之前,通常,我们会将一些通用的功能封装在一个项目模块之中(避免每个项目写重复代码,可封装如数据源切换、安全校验之类的代码),再打包成jar包,发布到maven私仓中,供其他项目引入使用。

Staba的博客 1275

【Pandas总结】第二节 Pandas 的数据读取_pd.read_csv()的使用详解(非常全面,推荐收藏)

pandas对纯文本的读取提供了非常强力的支持,参数有四五十个。这些参数中,有的很容易被忽略,但是在实际工作中却用处很大。

weixin_47139649的博客 11万+

从零开始实现一个Spring Boot Starter

Spring Boot Starter 是一个非常有用的组件,它可以帮助我们快速构建应用程序,同时也方便了组件的复用和升级。现在,我们已经成功地创建了一个简单的Spring Boot Starter,并使用它提供的服务。自动配置类是Spring Boot Starter的核心,它实现了所需的Bean的自动配置。使用 Spring Boot Starter,可以轻松地将功能添加到应用程序中,例如:添加对数据库的支持、添加对 Redis 的支持等等。**的Bean时,才会执行这个Bean的创建。

weixin_45701550的博客 2886

EndNote20保姆级安装教程:从下载到汉化一步到位(附闪退解决方案)

本文提供EndNote20的详细安装与汉化教程,涵盖系统准备、分步安装、路径优化及闪退解决方案。针对科研人员的需求,特别优化了中文环境下的使用体验,确保文献管理工具的高效稳定运行。

weixin_30415113的博客 342

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6266

自定义spring boot starter三部曲之二:实战开发

本文是《自定义spring boot starter三部曲》的第二篇,上一篇中我们通过学习spring cloud的starter,对spring boot的starter有了初步了解,也设计好了实战内容,今天就来一起实现; ...

程序员欣宸的博客 5859

手把手教你用Excel自动化处理G14大额风险暴露报表(含211版模板)

本文针对G14大额风险暴露报表(含211版)手工填报效率低、易出错的核心痛点,提供了一套基于Excel VBA的完整自动化解决方案。文章详细讲解了如何构建从数据采集、清洗、关联客户识别、风险暴露计算到自动化校验与归档的完整工作流,并附有可操作的代码示例,旨在帮助银行风控人员大幅提升报表处理效率与准确性。

weixin_29304985的博客 450

企业级spring-boot案例-自定义Spring Boot Starter

文章目录1. 未使用Spring Boot Starter前的情况2. Spring Boot Starter简介2.1 什么是Spring Boot Starter(启动器)2.2 Starter 模块整体结构2.3 Spring 官方提供的 Starter 和 Starter 命名规范3. 自定义Spring Boot Starter3.1 根据 starter 命名规范创建一个 spring boot 项目3.2 在 pom.xml 文件中引入依赖3.3 编写`ConfigInfo.java`、`Co

ThinkWon的博客 7587

基于YOLOv8的包装商品智能检测系统完整指南—含论文、代码

《基于YOLOv8的包装商品智能检测系统》摘要: 本文提出了一套完整的零售商品自动检测解决方案,利用YOLOv8深度学习框架实现高精度、高效率的商品识别。系统针对SKU110K大规模商品数据集(含11,762张高密度货架图像)进行优化,包含数据预处理、模型训练、推理检测和可视化界面全流程。详细介绍了从CSV标注到YOLO格式的转换方法、环境配置指南及技术架构设计。该系统可应用于智能零售、物流仓储等多个场景,有效解决人工盘点效率低、误差大的痛点。实验表明,该系统具备毫秒级检测速度和批量处理能力,为商业数字化转

FJN110的博客 209

2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src 和 port 文件夹 (src用于存放freertos源码,port文件夹存放内存和接口相关的文件) 3. 复制freertos/source文件夹下所有c文件复制到刚刚建立的freertos/src目录下 4. 复制FreeRTOSv9.0.0\FreeRTOS\Source\portablex下的MemMang和RVDS文件夹复制到刚刚建立的port问价夹下 5. 将FreeRTOSv9.0.0\FreeRTOS

Car12 1233

Spring Boot:通过spring-boot-starter-data-redis源码了解starter和autoconfigure模块

注:本文Spring Boot为2.X版本 在Spring Boot中,官方提供了`spring-boot-autoconfigure`包和starter包用来帮助我们简化配置,比如之前要建一个Spring mvc项目,需要我们配置web.xml,dispatcherservlet-servlet.xml,applicationContext.xml等等

404 Not Found 3万+

YOLO模型部署RK3588多核NPU并行加速完整教程:基于线程池的高性能AI推理实现

本教程详细介绍了如何在RK3588平台上实现多核NPU并行加速的AI推理方案。RK3588搭载3个独立NPU核心,总算力达6TOPS,支持单核、双核和三核三种工作模式。文章深入解析了NPU硬件架构特点,包括核心独立处理能力、内存带宽分配及多核心协作机制,并提供了C++代码示例展示核心负载均衡、任务调度和内存优化策略。通过线程池技术可以有效利用多核NPU并行计算能力,显著提升AI推理性能,特别适合高并发场景。教程还包含内存子系统的瓶颈分析和性能预估方法,为开发者提供完整的优化思路。

LXY_LOVE36的博客 797

深入Spring Boot:自定义Starter开发与实践

Starter是SpringBoot的核心组件之一,它是一种依赖管理机制,旨在简化Spring应用的开发过程。通过引入一个Starter模块,开发者可以快速启用SpringBoot提供的特定功能,而无需手动管理复杂的依赖和配置。例如,是一个常用的Starter模块,它封装了SpringMVC和嵌入式Servlet容器(如Tomcat)的依赖,开发者只需在pom.xml或中引入该模块,即可快速启动一个Web应用。集成第三方库。

小筱在线博客 1508

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【SpringBoot】Spring Boot Starter 详解与实战:手把手自定义 Starter

在传统 Spring 项目中,如果我们想使用Spring + MyBatis + Druid 连接池,通常需要手动添加多个依赖,并编写相关配置:</</</</</</</</然后还要写DataSource配置类、MyBatis 配置等。而的作用就是把这些繁琐的配置封装起来,让开发者只需要引入一个 Starter 依赖,即可自动装配所有组件。例如,使用只需这样:</</</无需手动配置DataSource,Spring Boot 会自动装配数据库相关的 Bean,大大减少了开发成本。

工一木子 2372

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JavaWeb21-Spring Boot:自定义 Starter 开发(封装通用业务组件)

Spring Boot自定义Starter开发指南:实现日志脱敏组件 本文介绍如何开发一个Spring Boot自定义Starter,封装日志脱敏功能。通过创建sensitive-log-spring-boot-starter模块,实现以下功能: 核心功能 字段级脱敏规则定义(如手机号中间四位替换为****) 通过注解标记需要脱敏的方法或参数 支持JSON请求体和响应体的日志脱敏 自定义正则表达式匹配脱敏 实现步骤 创建Maven项目,添加必要的依赖(spring-boot-autoconfigure、sp

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring Boot系列七 实现自己的spring boot starter工程

spring boot starter工程对于使用者是非常方便的,使用者通常只要在pom.xml引入starter的jar,则此工程依赖的类,就全部自动引入。因此我们常用的开源组件都会提供一个start工程给开发者,让开发者非常方便集成本组件到spring中。本文通过自己实现一个简单的demo,详细说明了如何实现一个自己的spring boot starter工程。

不积跬步无以至千里; 不积小流无以成江海 9400

自定义Spring Boot Starter开发指南

Spring Boot Starter开发要点 核心需求:开发自定义审计starter解决多项目重复代码问题,需支持事件记录、可配置化输出和持久化存储。 技术实现: 使用@Conditional注解实现条件化配置,包括环境检查、类路径检测等 通过@Enable*自定义注解简化功能激活 采用AOP拦截方法调用,记录包含时间戳、方法名、参数等审计信息 支持TEXT/JSON两种输出格式和BEFORE/AFTER/BOTH三种记录时机 最佳实践: 遵循Spring Boot starter规范,分离autocon

静水深流 1370

Spring Boot开发自定义的starter

使用Spring Boot 开发自定义的starter

weixin_49561506的博客 1794

Spring Boot自定义Starter开发实战指南

Spring Boot Starter是Spring生态中实现依赖管理和自动配置的核心机制。其工作原理基于条件化配置加载,通过META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件实现组件智能装配。这种设计模式大幅降低了企业级应用的技术整合成本,特别是在微服务架构下,自定义Starter能有效封装Redis、支付网关等通用组件的配置细节。典型的工程实践包括使用@ConditionalOnClass等

weixin_34377919的博客 367

自定义Spring Boot Starter的全面指南

本文介绍了自定义Spring Boot Starter的核心优势与实现细节。主要特点包括:1) 通过封装通用依赖提升开发效率,消除样板代码,确保环境一致性;2) 增强代码复用性,采用模块化设计和统一版本控制;3) 优化维护性,支持集中式变更和IDE智能提示。技术实现上详细解析了Gradle构建配置、条件化自动配置机制、数据模型设计、AOP切面实现以及配置元数据管理,展示了如何通过注解驱动和智能装配实现灵活的功能扩展。合理设计的自定义Starter可显著提升企业应用的开发标准化程度。

静水深流 1436
上一篇: 从 B 站崩溃报告看分布式系统的技术栈
下一篇: SCA在得物DevSecOps平台上应用​
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值