
在写我的 IrisRPC 框架的时候,希望能够以 spring-boot-starter 的形式适配一下 SpringBoot 框架,参照网上的步骤进行了 starter 的开发,开发完成后测试的时候发现 AutoConfiguration 中的 Bean 并没有成功注入,反复检查之后也没发现问题。
最终在这篇文章中 springboot自定义starter,实现自动装配_定制starter的功能-CSDN博客找到了问题出现的原因,是因为 Spring 版本导致的配置方式不一致带来的问题:
自动配置类放入自动配置文件中,不同版本对应的配置文件不同,按需选择。
springboot 2.7
之前自动配置文件为spring.factories
,配置内容的形式如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
x.x.xxxAutoConfigurationspringboot 3.0
之后自动配置文件只能使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
, 在该文件中写好类路径springboot 2.7
到springboot 3.0
,自动配置文件可以使用spring.factories
,也可以使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
这里也总结一下 spring-boot-starter
的开发流程:
创建项目
创建一个 Maven 项目,可以参考命名为:xxx-spring-boot-starter
,引入相关 Maven 依赖:
<dependency> |
配置属性(可选)
用来实现从 spring 项目配置文件中自动加载配置,如果功能不需要配置项,这一步可以省略。
|
开发自动配置类
|
设置允许自动配置
需要允许用户的 spring 项目引入 starter 后 MyAutoConfiguration 能够生效,因此需要在 starter 项目中做出配置,这个也就是前面提到的不同的 spring 版本(是以用户使用的版本为准)有不同的配置方案:
springboot 2.7
之前自动配置文件为spring.factories
,配置内容的形式如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=x.x.xxxAutoConfiguration
springboot 3.0
之后自动配置文件只能使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
, 在该文件中写好类路径springboot 2.7
到springboot 3.0
,自动配置文件可以使用spring.factories
,也可以使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
由于我们没办法确定用户使用的是哪个版本,所以我觉得最好的方法是==都配置==。
测试及使用
在 maven 中引入我们前面开发的 starter,如果设置了 MyProperties 的话,进行一下配置就可以了。
参考资料