詳解SpringBoot如何自定義一個(gè)Starter
需求
在一個(gè)項(xiàng)目中,用戶需要發(fā)送消息,可以通過(guò)郵件,QQ,微信,釘釘,飛書等,目前這些發(fā)送消息的方式都已經(jīng)提供了公開的API,想要實(shí)現(xiàn)在項(xiàng)目中通過(guò)簡(jiǎn)單的配置各個(gè)發(fā)發(fā)送方的發(fā)送方信息,然后直接調(diào)用發(fā)送的API,發(fā)送信息即可,下面舉個(gè)例子:
配置
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
調(diào)用
@Autowired
SendEmailMessageServiceImpl emailMessageService;
@Autowired
SendFeishuMessageServiceImpl feishuMessageService;
public boolean sendEmail(String msg) {
return emailMessageService.sendMessage(msg);
}
public boolean sendFeishu(String msg){
return feishuMessageService.sendMessage(msg);
}
效果的就是以上這樣,只要通過(guò)配置需要發(fā)送消息的配置,自動(dòng)注入發(fā)送消息的API,就可以實(shí)現(xiàn)發(fā)送消息了,以下是實(shí)現(xiàn)過(guò)程。
starter創(chuàng)建
第一步,需要為你的starter取一個(gè)響亮的名字,spring的官方文檔中說(shuō)明,官方的 starter 的命名格式為 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq第三方我們自己的命名格式為 {xxxx}-spring-boot-starter。比如mybatis-spring-boot-starter,此處,我命名為message-spring-boot-starter
自定義配置信息類
因?yàn)橐陧?xiàng)目中的配置文件中寫配置信息,所以在這個(gè)starter中,我們需要通過(guò)一個(gè)配置信息類來(lái)接收配置的信息。
@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ā)送消息的實(shí)現(xiàn)
由于需要通過(guò)這個(gè)starter實(shí)現(xiàn)發(fā)送消息,所以這里可能得要引入發(fā)送郵件,發(fā)送飛書的官方API,這里就不搞這么復(fù)雜了,主要還是看過(guò)程,自定義一個(gè)接口模擬一下即可。
模擬接口定義
public interface SendMessageService {
Boolean sendMessage(String message);
}
模擬接口實(shí)現(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ā)送內(nèi)容為:" + 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ā)送內(nèi)容為:" + message);
return true;
}
}
自動(dòng)配置類
@EnableConfigurationProperties(value = MessageProperties.class)
@Configuration
public class MessageAutoConfiguration {
/**
* 給發(fā)送郵件的實(shí)現(xiàn)類,注入配置信息
* @param messageProperties
* @return
*/
@Bean
public SendEmailMessageServiceImpl emailMessageConfig(MessageProperties messageProperties){
return new SendEmailMessageServiceImpl(messageProperties);
}
/**
* 給發(fā)送飛書的實(shí)現(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
項(xiàng)目結(jié)構(gòu)

編寫完之后,mvn install即可。
如何使用該starter
在我們的項(xiàng)目中,引入自定義starter的坐標(biāo)
<dependency>
<groupId>run.qiyuan</groupId>
<artifactId>message-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
然后在配置文件中配置相關(guān)的信息
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
測(cè)試
@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如何自定義一個(gè)Starter的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot自定義Starter的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用jib插件為Java應(yīng)用構(gòu)建鏡像的方法
這篇文章主要介紹了使用jib插件為Java應(yīng)用構(gòu)建鏡像,要是用戶本地沒(méi)安裝docker,可以使用jib制作出帶有鏡像的tar文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
CentOS7和8中安裝Maven3.8.4的簡(jiǎn)單步驟
maven是屬于apache的一個(gè)工具,主要是對(duì)java進(jìn)行編譯打包,解決依賴關(guān)系,下面這篇文章主要給大家介紹了關(guān)于CentOS7和8中安裝Maven3.8.4的相關(guān)資料,需要的朋友可以參考下2022-04-04
JavaWeb實(shí)現(xiàn)郵件發(fā)送接收功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb郵件發(fā)送接收功能的實(shí)現(xiàn),郵件發(fā)送和接收功能是非常常用的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12
全網(wǎng)最精細(xì)詳解二叉樹,2萬(wàn)字帶你進(jìn)入算法領(lǐng)域
大家好,我是哪吒,一個(gè)熱愛(ài)編碼的Java工程師,本著"欲速則不達(dá),欲達(dá)則欲速"的學(xué)習(xí)態(tài)度,在程序猿這條不歸路上不斷成長(zhǎng),所謂成長(zhǎng),不過(guò)是用時(shí)間慢慢擦亮你的眼睛,少時(shí)看重的,年長(zhǎng)后卻視若鴻毛,少時(shí)看輕的,年長(zhǎng)后卻視若泰山,成長(zhǎng)之路,亦是漸漸放下執(zhí)念,內(nèi)心歸于平靜的旅程2021-08-08

