SpringBoot怎么自定义一个Starter?
需求
在一个项目中,用户需要发送消息,可以通过邮件,QQ,微信,钉钉,飞书等,目前这些发送消息的方式都已经提供了公开的API,想要实现在项目中通过简单的配置各个发发送方的发送方信息,然后直接调用发送的API,发送信息即可,下面举个:
配置 message: email: username: Aden password: 123456 key: HJFHADJSFBDASFHUADSINF api-url: http://blog.qiyuan.run feishu: user-name: Aden pass-word: 654321 key: HFJKADSBFJKADSJFKADSNFAD api-url: http://blog.qiyuan.run
调用 @Autowired SendEmailMessageServiceImpl emailMessageService; @Autowired SendFeishuMessageServiceImpl feishuMessageService; public boolean sendEmail(String msg) { return emailMessageService.sendMessage(msg); } public boolean sendFeishu(String msg){ return feishuMessageService.sendMessage(msg); }
效果的就是以上这样,只要通过配置需要发送消息的配置,自动注入发送消息的API,就可以实现发送消息了,以下是实现过程。 starter创建
第一步,需要为你的starter取一个响亮的名字,spring的官方文档中说明,官方的 starter 的命名格式为 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq
第三方我们自己的命名格式为 {xxxx}-spring-boot-starter 。比如mybatis-spring-boot-starter ,此处,我命名为message-spring-boot-starter 自定义配置信息类
因为要在项目中的配置文件中写配置信息,所以在这个starter中,我们需要通过一个配置信息类来接收配置的信息。 @ConfigurationProperties(prefix = "message") @Data public class MessageProperties { /** * 邮箱消息 */ private MessageConfigInfo email = new MessageConfigInfo(); /** * 飞书消息 */ private MessageConfigInfo feishu = new MessageConfigInfo(); @Data public static class MessageConfigInfo { /** * 用户名 */ private String userName; /** * 密码 */ private String passWord; /** * 秘钥 */ private String key; /** * 消息发送API */ private String apiUrl; } } 发送消息的实现
由于需要通过这个starter实现发送消息,所以这里可能得要引入发送邮件,发送飞书的官方API,这里就不搞这么复杂了,主要还是看过程,自定义一个接口模拟一下即可。
模拟接口定义 public interface SendMessageService { Boolean sendMessage(String message); }
模拟接口实现 public class SendEmailMessageServiceImpl implements SendMessageService { private MessageProperties messageProperties; public SendEmailMessageServiceImpl(MessageProperties messageProperties) { this.messageProperties = messageProperties; } @Override public Boolean sendMessage(String message) { System.out.println(messageProperties.toString() + " 开发发送邮件,发送内容为:" + message); return true; } } public class SendFeishuMessageServiceImpl implements SendMessageService { private MessageProperties messageProperties; public SendFeishuMessageServiceImpl(MessageProperties messageProperties) { this.messageProperties = messageProperties; } @Override public Boolean sendMessage(String message) { System.out.println(messageProperties.toString() + " 开发发送邮件,发送内容为:" + message); return true; } } 自动配置类@EnableConfigurationProperties(value = MessageProperties.class) @Configuration public class MessageAutoConfiguration { /** * 给发送邮件的实现类,注入配置信息 * @param messageProperties * @return */ @Bean public SendEmailMessageServiceImpl emailMessageConfig(MessageProperties messageProperties){ return new SendEmailMessageServiceImpl(messageProperties); } /** * 给发送飞书的实现类,注入配置信息 * @param messageProperties * @return */ @Bean public SendFeishuMessageServiceImpl feishuMessageConfig(MessageProperties messageProperties){ return new SendFeishuMessageServiceImpl(messageProperties); } } spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=run.qiyuan.message.config.MessageAutoConfiguration 项目结构
编写完之后, mvn install 即可。如何使用该starter
在我们的项目中,引入自定义starter的坐标 run.qiyuan message-spring-boot-starter 0.0.1-SNAPSHOT
然后在配置文件中配置相关的信息 message: email: username: Aden password: 123456 key: HJFHADJSFBDASFHUADSINF api-url: http://blog.qiyuan.run feishu: user-name: Aden pass-word: 654321 key: HFJKADSBFJKADSJFKADSNFAD api-url: http://blog.qiyuan.run
测试 @SpringBootApplication public class TeachApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(TeachApplication.class, args); SendEmailMessageServiceImpl emailMessageService = context.getBean(SendEmailMessageServiceImpl.class); emailMessageService.sendMessage("你好,Starter!,这是一封邮件信息! "); SendFeishuMessageServiceImpl feishuMessageService = context.getBean(SendFeishuMessageServiceImpl.class); feishuMessageService.sendMessage("你好,Starter!,这是一封飞书信息!"); } }
原文链接:https://www.cnblogs.com/onecoder/p/16894269.html
今天,在东湖追光以下内容来自武汉东湖光,千变万化,是大自然的魔法师。熹微的晨光,明媚的日光,温柔的湖光,灿烂的霓虹光东湖的光无处不在,有了光,万物都变得美妙起来。光所照之地,人就有力量,趁着天光正
安阳两家5A景区对全国游客免门票河南日报客户端记者杨之甜12月26日,记者从相关部门获悉,为提振市场信心和活力,从2022年12月16日到2023年1月6日,安阳市殷墟景区林州市太行大峡谷景区对全国游客出台免门票
海口市民游客海边享暖阳观落日来源中国新闻网12月23日,市民游客在海口湾观赏落日美景。凌楠摄12月23日,市民游客在海口湾观赏落日美景。凌楠摄12月23日,市民游客在海口湾观赏落日美景。凌楠摄12月23日,市
公园融城美丽龙岗原标题大美中国公园融城美丽龙岗一群鹭鸟飞临位于深圳龙岗区龙城街道的大运中心湖畔。周洋摄龙岗区客家民俗博物馆设址于现存最大的客家围屋之一的鹤湖新居。郭保全摄龙岗永胜堂舞麒麟国家级非遗
中国四大古城(一)四川阆中古城中国四大古城是指四川阆中古城云南丽江古城山西平遥古城和安徽徽州古城,全部四篇文章2020年首发于老飞摄影微信公众号。阆中古城全景,2019年11月17日拍摄,由58张照片拼接而成阆
好香好甜!蔡甸第一波草莓上市,超详采摘攻略来了一年将尽,香香甜甜的草莓季也不期而至。超市里水果店里,草莓被摆上了最佳的展示位置,鲜亮红润的色泽吸引着每个过往行人的目光。想吃草莓心,被撩拨的蠢蠢欲动。别着急,蔡甸采摘草莓的位置和
咬定青山不放松时间在流光中飞奔而去,新年又在悄悄地临近。蓦然回首,我在木王已工作两年了。这两年,是不同寻常的两年,木王也是不同一般的木王。鹰嘴峰风景两年来,疫情不时袭来已成常态,商洛地区严控的防
我们去莲青山揽胜探秘迷失的王陵皇城前世与今生当您放空各种杂念,静心感悟万古青山,体味天地奇莲。在这雄犷的山峦之间,山东省滕州市莲青山因山高石怪而得势,因水而得灵,以它特有的清雅灵秀悠久的历史文化美丽动人的传说故事,加上现代完
铁轨上的慢旅行2023年,10条全新火车之旅,带你游遍世界!火车旅行近年来已经越来越成为一种时尚,随着铁轨轻晃的节奏慢旅行,一路都是风景。2023年,世界各国又纷纷开通了全新的火车旅游线路,每一条都能带你前往迷人目的地。接下来我们就盘点一下
船靠梅西老家罗萨里奥经过三十四小时的航行,深入南美大陆几百公里,我们终于成功挂靠梅西的出生地,阿根廷第二大城市罗萨里奥,从拉普拉塔河口上引水,经过十几个小时航行,河道尽头转入普拉那河,就正式进入阿根廷
首届敦煌文博会散忆华夏文明八千年,丝绸之路三千里。这是对甘肃历史与文化的高度概括和生动写照。公元609年,在甘肃河西走廊的焉支山下,一场万国博览会盛大举行。如今,国家把丝绸之路(敦煌)国际文化博览会