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
中年男人的魅力,只源于三个特质,你身上有吗?一遇事从容或许是岁月的无情,带来的同等的惠赠或许是阅历的丰富,加持着强大的身心。对中年男人来说,独立思考与分辨是非的能力,使得他们不再轻易惊慌失措!相比于年少轻狂,他们身上多了一丝
中年情殇人到中年,生活得一地鸡毛,心力交瘁,哀莫大于心死。不经意间遇到一个丁香一样结着愁怨的伊人,相同的灵魂,相处时互诉衷肠,让人感到好似回到青年时代,怦然心动,翻开那时摘抄下来的一首诗,
不负患者信任托付10月16日上午,各科室以多种形式收听收看了习近平总书记所作的报告,和大家一起再次学习,仍很激动!17日,在武汉大学人民医院(湖北省人民医院),该院党委理论学习中心组开展扩大学习,
2022。10。22黄金下周走势分析世界上没有什么会比输到身无分文更让人长经验了,等有一天你知道不做某件事就会不亏钱时,你才可以学习该怎样做才会赚钱。你懂了吗?杰西。利弗莫尔回顾一下昨日周五行情走势昨天美盘价格走了一
海运费持续下跌,或回归2019年水平,为何有卖家高兴不起来?我在头条搞创作第二期持续下跌的海运费对卖家来说是利好消息吗?从今年上半年以来,全球海运费的价格均出现了持续性的下跌,海运费的下跌还能持续多久?又会给卖家带来什么样的影响?海运费持续
亿吨级油气区4!太提气能源是经济发展的基石,在过去的十年里,我国能源自主保障能力显著提升,建成了全球最大的清洁发电体系,能源结构不断优化,有力地保障了国民经济的稳定运行。马翠华现在住在北京门头沟一个居民
硅片巨头打响价格战,隆基进入守利润关键期船大,难掉头。意将硅料硅片电池片组件四大环节都握在手中的隆基,曾享受着全行业最高的利润和市值。如今,却面临来自各个环节的同步围剿。隆基三季度业绩,增速掉队了。近日,一批光伏企业陆续
先思考,再价值,后金钱最近开始在头条上写写东西,当看到第一笔收益时,那一刻我有点小兴奋,因为这是第一次在自媒体上的收益,虽然是0。02元,但我认为我写的东西产生了价值。我们做成或做好一件事,往往第一时间
金钟奖红毯一言难尽,林心如礼服没撑住,陈意涵怪,杨祐宁变好帅第57届金钟奖来到第二天戏剧类的颁奖现场,经过了前一天小S身穿华服,以一票之差输给前男友黄子佼和Lulu之后,不知道还会有什么精彩的画面出现。先来看看星光熠熠的红毯吧!当晚最火的是
洗头容易忽略的4件事,很多人都有,难怪发质差发量少每次心情有点糟糕的时候,大家都想换一个发型。换一个发型,换一个心情,换一个颜色,换一种生活态度。经常在长发短发直发卷发间徘徊的你,发质还好吗?发量还多吗?要想随意地在各种好看的发型
天猫双11首发!由巴黎世家打造的YEEZYGAP即将预售作为下半年最重要的消费节点,天猫双11将在10月24日晚8点开启预售。由巴黎世家打造的限量合作系列YEEZYGAP,即将在10月24日20点,在GAP天猫官方旗舰店开启全球预售,其