詳解SpringBoot如何自定義一個Starter
需求
在一個項目中,用戶需要發(fā)送消息,可以通過郵件,QQ,微信,釘釘,飛書等,目前這些發(fā)送消息的方式都已經(jīng)提供了公開的API,想要實現(xiàn)在項目中通過簡單的配置各個發(fā)發(fā)送方的發(fā)送方信息,然后直接調用發(fā)送的API,發(fā)送信息即可,下面舉個例子:
配置
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); }
效果的就是以上這樣,只要通過配置需要發(fā)送消息的配置,自動注入發(fā)送消息的API,就可以實現(xiàn)發(fā)送消息了,以下是實現(xiàn)過程。
starter創(chuàng)建
第一步,需要為你的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; /** * 消息發(fā)送API */ private String apiUrl; } }
發(fā)送消息的實現(xiàn)
由于需要通過這個starter實現(xiàn)發(fā)送消息,所以這里可能得要引入發(fā)送郵件,發(fā)送飛書的官方API,這里就不搞這么復雜了,主要還是看過程,自定義一個接口模擬一下即可。
模擬接口定義
public interface SendMessageService { Boolean sendMessage(String message); }
模擬接口實現(xiàn)
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() + " 開發(fā)發(fā)送郵件,發(fā)送內容為:" + 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() + " 開發(fā)發(fā)送郵件,發(fā)送內容為:" + message); return true; } }
自動配置類
@EnableConfigurationProperties(value = MessageProperties.class) @Configuration public class MessageAutoConfiguration { /** * 給發(fā)送郵件的實現(xiàn)類,注入配置信息 * @param messageProperties * @return */ @Bean public SendEmailMessageServiceImpl emailMessageConfig(MessageProperties messageProperties){ return new SendEmailMessageServiceImpl(messageProperties); } /** * 給發(fā)送飛書的實現(xiàn)類,注入配置信息 * @param messageProperties * @return */ @Bean public SendFeishuMessageServiceImpl feishuMessageConfig(MessageProperties messageProperties){ return new SendFeishuMessageServiceImpl(messageProperties); } }
spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=run.qiyuan.message.config.MessageAutoConfiguration
項目結構
編寫完之后,mvn install
即可。
如何使用該starter
在我們的項目中,引入自定義starter的坐標
<dependency> <groupId>run.qiyuan</groupId> <artifactId>message-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
然后在配置文件中配置相關的信息
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!,這是一封郵件信息!\n\n"); SendFeishuMessageServiceImpl feishuMessageService = context.getBean(SendFeishuMessageServiceImpl.class); feishuMessageService.sendMessage("你好,Starter!,這是一封飛書信息!"); } }
以上就是詳解SpringBoot如何自定義一個Starter的詳細內容,更多關于SpringBoot自定義Starter的資料請關注腳本之家其它相關文章!
相關文章
對ArrayList和LinkedList底層實現(xiàn)原理詳解
今天小編就為大家分享一篇對ArrayList和LinkedList底層實現(xiàn)原理詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10MybatisPlus?QueryWrapper常用方法實例
MyBatis-Plus(opens new window)是一個MyBatis(opens new window)的增強工具,在 MyBatis的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關于MybatisPlus?QueryWrapper常用方法的相關資料,需要的朋友可以參考下2022-04-04詳細分析Java并發(fā)集合ArrayBlockingQueue的用法
這篇文章主要介紹了詳細分析Java并發(fā)集合ArrayBlockingQueue的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04spring boot 1.5.4 集成shiro+cas,實現(xiàn)單點登錄和權限控制
這篇文章主要介紹了spring boot 1.5.4 集成shiro+cas,實現(xiàn)單點登錄和權限控制,需要的朋友可以參考下2017-06-06