自定义 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;

猜你喜欢

转载自blog.csdn.net/java_beautiful/article/details/125819617