开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
1、自定义Starter
自定义Starter是学习SpringBoot不可缺少的一环,借用一句前辈说过的话:学SpringBoot不会自定义Starter等于没学。这也在一定程度上说明了,会自定义Starter则必定要对SpringBoot的自动配置及运行原理有自己的理解,并能在实践中使用。
1.1、什么是Starter?
将一系列服务封装成一个starter,使用该服务时直接引入对应的starter即可,该starter会自动配置完成该服务需要的基础配置,开箱即用。先看两个常用的依赖:
上述两种图就清晰的表示了Starter的使用,开箱即用,导入对应的Starter即可使用相应的服务;
Starter,是“一站式服务(onestop)”的依赖 Jar 包:
- 包含Spring 以及相关技术(比如 Redis)的所有依赖
- 提供了自动配置的功能,开箱即用
- 提供了良好的依赖管理,避免了包遗漏、版本冲突等问题
1.2、Starter结构
Redis Starter示例:
Maven可选依赖说明:
1.3、自定义Starter实例
1.3.1、应用场景
1.3.2、创建流程(源码见Gitee)
1.3.2.1、创建用户微服务
首先创建一个maven项目 ms-user ,作为用户微服务的项目,它向外提供和用户相关的接口。
接着在项目ms-user中,新建一个模块ms-user-web,他是用户微服务的web应用,基于SpringBoot、SpringMVC、SpringCloud进行开发。
然后,新建一个模块ms-user-api,它里面包含了向外发布的HTTP接口和相关的参数与返回类型。
然后创建一个自动配置的模块,创建一个自动配置类,并使用注解@Configuration和@
EnableFeignClients修饰。
接着,定义一个starter模块,这是一个空模块,只有一个pom文件,通常是为了管理依赖。
最后使用maven的install命令对ms-user-spring-boot-starter编译、打包,得到一个ms-user-spring-boot-starter的jar包。
1.3.2.2、创建营销微服务
这里创建营销微服务调用用户微服务程序提供的和用户相关的服务,通常微服务程序部署在不同的主机上,然后可以通过http协议调用提供微服务的程序接口,获得相应服务(这就意味着用户微服务程序和营销微服务程序必须同时运行,这样才能够调用相应的微服务程序),这里通过OpenFeign实现。
首先,新建一个营销微服务maven项目 ms-marketing,并导入相关依赖。
接着,创建营销微服务子模块,并导入相关依赖。
然后,注入FeignClient客户端,即可调用FeignClient提供的服务,此时并未使用ms-user-spring-boot-starter,而是使用直接导入的ms-user-api模块,服务同样可以使用。
然后,将模块ms-user-api替换为ms-user-spring-boot-starter依赖,则会报错,如下:
这就需要在ms-user-autoconfigure中添加自动配置文件,如下。
至此,自定义starter以及使用自定义starter就已经完成了。
1.3.2.3、拓展
测试熔断器的功能,初始时会报错,这是因为ms-marketing-web只会扫描当前项目的package,此时需要在ms-user-autoconfigure的自动配置类MsUserAutoConfiguration中使用@Import注解导入@Import({UserFeignClient.UserFallbackFactory.class})用于熔断处理的类,并且在ms-marketing-web的启动类上添加@ComponentScan(basePackageClasses = UserFeignMarker.class),程序能运行,但无法访问 http://localhost:12080/hello/10001。
1.3.3、SpringCloud OpenFeign补充
SpringCloud OpenFeign是向外提供微服务接口,实现了OpenFeign所在的微服务程序,其实就是利用动态代理加载相应的OpenFeign实现类(通常是Controller),并调用该实现类提供的http接口来完成服务调用。
SpringCloud OpenFeign的简单使用
1.3.4、注解处理器
SpringBoot中的注解处理器
注解处理器: 在编译阶段,生成指定注解的元数据
- spring-boot-configuration-processor
- spring-boot-autoconfigure-processor
spring-boot-configuration-processor
能够使IDE进行自动提示。
spring-boot-autoconfigure-processor
使SpringBoot项目启动时能够快速地过滤掉不符合条件的自动配置类,加快启动速度。
1.4、Starter总结
Starter通常是一个空的jar包,用来对依赖进行集中管理。
模块 ms-user-spring-boot-starter
- 通常是一个空的 Jar 包
- 对依赖进行集中管理:
- 必要的 SpringBoot 核心 starter
- ms-user-autoconfigure 模块
- ms-user-api 模块
模块 ms-user-autoconfigure
- 自动配置的核心模块,主要包括
- 自动配置类;
- spring.factories 配置文件;
- 所需的配置项(通过注解 @EnableConfigurationProperties 和@ConfigurationProperties 来实现,从application.yml文件中读取数据,并注入到IOC容器中;)
- 值得注意:它可选依赖于 ms-user-api;
实现Starter时建议加入以下两个注解处理器。