SpringBoot自定义Starter
SpringBoot提供了很多封装好的Starter供我们使用,如果我们有成熟的功能也可以封装成starter供别人使用。
假设有一个成熟的功能:定时往控制台打印信息,想把他封装成一个Starter,看看如何封装。创建空白SpringBoot项目
创建一个新的SpringBoot项目:myspringbootstarter,在这个项目里实现主体业务功能。
创建属性类
创建属性类MyMessageProperties,这里定义了字段msgstr,表示将来要往控制台输出的消息。
这是设置了默认值,也通过ConfigurationProperties注解设置从配置文件application。yml中读取用户配置。用户配置有更高的优先级。ConfigurationProperties(valuemymsg)publicclassMyMessageProperties{控制台输出的消息privateStringmsgstr这是默认输出的信息;publicStringgetMsgstr(){returnmsgstr;}publicvoidsetMsgstr(Stringmsgstr){this。msgstrmsgstr;}}创建自动配置类
使用EnableConfigurationProperties注解加载上一步的属性类。
创建定时任务,每隔1秒中在控制打印从MyMessageProperties中读取的配置信息。EnableConfigurationProperties(MyMessageProperties。class)EnableSchedulingpublicclassMyMessageAutoConfiguration{AutowiredprivateMyMessagePropertiesmyMessageProperties;Scheduled(fixedDelay1000)publicvoidprintMsg(){System。out。println(this。myMessageProperties。getMsgstr());}}加载自动配置类
创建文件:srcmainresourcesMETAINFspring。factories
在文件中配置启动时加载的配置类名。
配置后,在SpringBoot启动时,就会自动加载指定的配置类。org。springframework。boot。autoconfigure。EnableAutoConfigurationcom。example。myspringbootstarter。config。MyMessageAutoConfiguration配置自动提示
在配置文件中输入配置项时,会有相关提示。
通过引入springbootconfigurationprocessor实现此功能。dependencygroupIdorg。springframework。bootgroupIdspringbootconfigurationprocessorartifactIddependency
执行Maveninstall命令,将文件targetclassesMETAINFspringconfigurationmetadata。json复制到srcmainresourcesspringconfigurationmetadata。json
完成后将springbootconfigurationprocessor从pom文件中删掉,不然会出现2组相同的提示信息。打包
将开发完成的starter项目打包。
执行Maven的install命令。
使用
在其他项目中引入自定义的starerdependencygroupIdcom。examplegroupIdmyspringbootstarterartifactIdversion0。0。1SNAPSHOTversiondependency
在项目application。properties中配置要打印的字符串,配置时会给出提示信息。
配置打印的信息mymsg。msgstrhello
运行项目,会在控制台打印在配置文件中配置的信息。
如果删除application。properties中的配置,则会打印默认信息。
至此,我们自定义的Starter已经可以正常使用了。