自定义spring boot starter三部曲之一:准备工作

简介: 从本章开始,一起实战一个自定义的spring boot starter,整个系列共三篇文章,本篇是开篇,咱们一起先了解基本概念、规划实战内容,为整个系列做好准备

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
  • 从本章开始,一起实战一个自定义的spring boot starter,整个系列共三篇文章,内容如下:
  1. 准备:了解基本概念、规划实战内容;
  2. 实战:开发自定义starter,并在demo工程中使用它;
  3. 深入:从spring和spring boot源码层面分析starter的原理;

本章内容概览

  1. 查看官方资料;
  2. 设定实战目标;
  3. 学习spring cloud的starter,作为实战参考;
  4. 实战内容的具体设计;

版本信息

  • 本次实战的版本信息:
  1. java:1.8.0_144
  2. spring boot:1.5.16.RELEASE
  3. spring cloud:Edgware.RELEASE

官方资料

  • 为了有个初始印象,我们从spring官方文档看起吧:
  • 点击下图红框位置:

image.png

  • 在弹出的列表中选择1.5.16版本的reference,如下图红框:

image.png

image.png

  • 我的理解:
  • 第一. 在应用中可以用starter将依赖库问题变得简单,如果你想依赖Spring和JPA,只需在应用中依赖spring-boot-starter-data-jpa即可;
  • 第二. 常用库的官方starter,其artifactId的格式类似"spring-boot-starter-*", 对于非官方的starter,建议将业务名称放在"spring-boot-starter"前面,例如"acme-spring-boot-starter";
  • 第三. 已列举常用的官方starter,可用来参考;

设定实战目标

  • 本次实战的目标如下:
  1. A应用提供加法计算的服务;
  2. B应用提供减法计算的服务;
  3. C应用要使用加法计算和减法计算的服务,并且减法服务可以通过配置来实现是否支持负数;

学习spring cloud的starter

  • 目标已定下,但是先不急着编码,我们去看下spring cloud的设计,用来作为借鉴参考;
  • 回顾一下我们使用Spring cloud的时候,如果要把一个应用作为Eureka client注册到Eureka server,只需在应用的pom.xml中添加如下依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 注册到Eureka server的工作,是由CloudEurekaClient类完成的,该类属于模块spring-cloud-netflix-eureka-client,因此我们要弄清楚以下两点:
  1. 为什么不需要应用的pom.xml中依赖spring-cloud-netflix-eureka-client?
  2. 为什么应用能自动注册到Eureka sever?

如何建立对spring-cloud-netflix-eureka-client模块的依赖

  • 打开spring-cloud-starter-netflix-eureka-client模块的pom.xml文件就一目了然了,如下图,原来在这个pom.xml文件中已经依赖了spring-cloud-netflix-eureka-client模块,因此,我们的应用只需依赖spring-cloud-starter-netflix-eureka-client模块,就能间接依赖到spring-cloud-netflix-eureka-client模块:

image.png

  • 再看看上图中其他的依赖,可以发现的确如官方文档所说,starter处理了复杂的依赖关系,我们只需要依赖starter即可,官方文档中还有一段话需要注意,如下图:

image.png

  • 上图红框中说明starter是个空的jar,其作用就是用来提供必要的模块依赖的,来看看spring-cloud-starter-netflix-eureka-client模块是否遵守此规则,如下图,只有配置文件,没有任何class:

image.png

为什么应用能自动注册到Eureka sever

  • 作为Eureka client的应用,在启动后就自动注册到Eureka server了,作为应用开发者的我们除了在pom.xml中依赖spring-cloud-starter-netflix-eureka-client模块,没有做其他设置,这是如何实现的呢?
  • 注册到Eureka server的工作,是CloudEurekaClient类在其父类的构造方法中完成的,搜索源码发现此类的在EurekaClientAutoConfiguration中被注册到spring容器,如下图红框所示:

image.png

  • 所以,现在问题就变成了如何让EurekaClientAutoConfiguration类被实例化?
  • 在spring-cloud-netflix-eureka-client模块的spring.factories文件中,找到了EurekaClientAutoConfiguration:

image.png

  • 这是个spring boot的扩展配置,在此文件中配置的bean都会被实例化,然后注册到spring容器,具体的细节,我们会在第三章结合spring boot源码详细分析,本章只要知道用法即可;
  • 此处小结Eureka client自动注册到Eureka server的过程:
  • 第一、spring-cloud-netflix-eureka-client模块的spring.factories文件中配置了EurekaClientAutoConfiguration,因此EurekaClientAutoConfiguration会被实例化并注册到Spring容器中;
  • 第二、EurekaClientAutoConfiguration中配置了CloudEurekaClient,因此CloudEurekaClient会实例化,在构造方法中执行了注册;

实战的设计

  • 参考了spring cloud的starter设计后,接下来的实战被设计成两个maven工程:customizestarter和customizestartertestdemo;
  • 工程customizestarter里面包含了四个模块,每个模块功能如下所示:
模块名称 作用 备注
customizeapi 包含 了接口和异常的定义 实现和调用服务时用到的接口和异常都在此工程中
addservice 提供加法服务 普通的maven工程,里面加法接口的实现类
minusservice 提供减法服务 普通的maven工程,里面有两个减法接口的实现类,一个支持负数,另一个不支持
customizeservicestarter 自定义starter模块 pom.xml中依赖了customizeapi、addservice、minusservice,自身有个Configuration类,通过@Bean注解向spring容器注册AddService和MinusService的实例
  • 工程customizestartertestdemo在pom.xml中依赖了上述的customizeservicestarter模块,提供的web服务会用到addservice和minusservice的服务,并且在应用启动时设置环境变量来选择使用的减法服务是否支持负数;
  • 至此,准备工作已经完成了,对基本原理和开发设计都已经清楚,接下来的章节我们来一起开发上述五个工程;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
11647 60
|
2月前
|
监控 安全 Java
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
Spring Boot 通过 Actuator 模块提供了强大的健康检查功能,帮助开发者快速了解应用程序的运行状态。默认健康检查可检测数据库连接、依赖服务、资源可用性等,但在实际应用中,业务需求和依赖关系各不相同,因此需要实现自定义健康检查来更精确地监控关键组件。本文介绍了如何使用 @HealthEndpoint 注解及实现 HealthIndicator 接口来扩展 Spring Boot 的健康检查功能,从而提升系统的可观测性与稳定性。
197 0
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
390 0
|
11月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
11月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
11月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
1793 15
|
12月前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
957 0
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
|
消息中间件 Java Kafka
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
690 5