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

73 阅读2分钟
  • 注册到 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 模块:

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

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

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

  • 作为 Eureka client 的应用,在启动后就自动注册到 Eureka server 了,作为应用开发者的我们除了在 pom.xml 中依赖 spring-cloud-starter-netflix-eureka-client 模块,没有做其他设置,这是如何实现的呢?

  • 注册到 Eureka server 的工作,是 CloudEurekaClient 类在其父类的构造方法中完成的,搜索源码发现此类的在 EurekaClientAutoConfiguration 中被注册到 spring 容器,如下图红框所示:

  • 所以,现在问题就变成了如何让 EurekaClientAutoConfiguration 类被实例化?

  • 在 spring-cloud-netflix-eureka-client 模块的 spring.factories 文件中,找到了 EurekaClientAutoConfiguration:

  • 这是个 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 里面包含了四个模块,每个模块功能如下所示:

  • 工程 customizestartertestdemo 在 pom.xml 中依赖了上述的 customizeservicestarter 模块,提供的 web 服务会用到 addservice 和 minusservice 的服务,并且在应用启动时设置环境变量来选择使用的减法服务是否支持负数;
  • 至此,准备工作已经完成了,对基本原理和开发设计都已经清楚,接下来的章节我们来一起开发上述五个工程;