经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
SpringBoot怎么自定义一个Starter ?
来源:cnblogs  作者:一只小coder  时间:2022/11/17 9:18:00  对本文有异议

小伙伴们曾经可能都经历过整天写着CURD的业务,都没写过一些组件相关的东西,这篇文章记录一下SpringBoot如何自定义一个Starter。
原理和理论就不用多说了,可以在网上找到很多关于该方面的资料,这里主要分享如何自定义。

原文链接:SpringBoot怎么自定义一个Starter ?一只小Coder

需求

在一个项目中,用户需要发送消息,可以通过邮件,QQ,微信,钉钉,飞书等,目前这些发送消息的方式都已经提供了公开的API,想要实现在项目中通过简单的配置各个发发送方的发送方信息,然后直接调用发送的API,发送信息即可,下面举个??:
配置

  1. message:
  2. email:
  3. username: Aden
  4. password: 123456
  5. key: HJFHADJSFBDASFHUADSINF
  6. api-url: http://blog.qiyuan.run
  7. feishu:
  8. user-name: Aden
  9. pass-word: 654321
  10. key: HFJKADSBFJKADSJFKADSNFAD
  11. api-url: http://blog.qiyuan.run

调用

  1. @Autowired
  2. SendEmailMessageServiceImpl emailMessageService;
  3. @Autowired
  4. SendFeishuMessageServiceImpl feishuMessageService;
  5. public boolean sendEmail(String msg) {
  6. return emailMessageService.sendMessage(msg);
  7. }
  8. public boolean sendFeishu(String msg){
  9. return feishuMessageService.sendMessage(msg);
  10. }

效果的就是以上这样,只要通过配置需要发送消息的配置,自动注入发送消息的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中,我们需要通过一个配置信息类来接收配置的信息。

  1. @ConfigurationProperties(prefix = "message")
  2. @Data
  3. public class MessageProperties {
  4. /**
  5. * 邮箱消息
  6. */
  7. private MessageConfigInfo email = new MessageConfigInfo();
  8. /**
  9. * 飞书消息
  10. */
  11. private MessageConfigInfo feishu = new MessageConfigInfo();
  12. @Data
  13. public static class MessageConfigInfo {
  14. /**
  15. * 用户名
  16. */
  17. private String userName;
  18. /**
  19. * 密码
  20. */
  21. private String passWord;
  22. /**
  23. * 秘钥
  24. */
  25. private String key;
  26. /**
  27. * 消息发送API
  28. */
  29. private String apiUrl;
  30. }
  31. }

发送消息的实现

由于需要通过这个starter实现发送消息,所以这里可能得要引入发送邮件,发送飞书的官方API,这里就不搞这么复杂了,主要还是看过程,自定义一个接口模拟一下即可。
模拟接口定义

  1. public interface SendMessageService {
  2. Boolean sendMessage(String message);
  3. }

模拟接口实现

  1. public class SendEmailMessageServiceImpl implements SendMessageService {
  2. private MessageProperties messageProperties;
  3. public SendEmailMessageServiceImpl(MessageProperties messageProperties) {
  4. this.messageProperties = messageProperties;
  5. }
  6. @Override
  7. public Boolean sendMessage(String message) {
  8. System.out.println(messageProperties.toString() + " 开发发送邮件,发送内容为:" + message);
  9. return true;
  10. }
  11. }
  1. public class SendFeishuMessageServiceImpl implements SendMessageService {
  2. private MessageProperties messageProperties;
  3. public SendFeishuMessageServiceImpl(MessageProperties messageProperties) {
  4. this.messageProperties = messageProperties;
  5. }
  6. @Override
  7. public Boolean sendMessage(String message) {
  8. System.out.println(messageProperties.toString() + " 开发发送邮件,发送内容为:" + message);
  9. return true;
  10. }
  11. }

自动配置类

  1. @EnableConfigurationProperties(value = MessageProperties.class)
  2. @Configuration
  3. public class MessageAutoConfiguration {
  4. /**
  5. * 给发送邮件的实现类,注入配置信息
  6. * @param messageProperties
  7. * @return
  8. */
  9. @Bean
  10. public SendEmailMessageServiceImpl emailMessageConfig(MessageProperties messageProperties){
  11. return new SendEmailMessageServiceImpl(messageProperties);
  12. }
  13. /**
  14. * 给发送飞书的实现类,注入配置信息
  15. * @param messageProperties
  16. * @return
  17. */
  18. @Bean
  19. public SendFeishuMessageServiceImpl feishuMessageConfig(MessageProperties messageProperties){
  20. return new SendFeishuMessageServiceImpl(messageProperties);
  21. }
  22. }

spring.factories

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=run.qiyuan.message.config.MessageAutoConfiguration

项目结构

image-1668519771251

编写完之后,mvn install即可。

如何使用该starter

在我们的项目中,引入自定义starter的坐标

  1. <dependency>
  2. <groupId>run.qiyuan</groupId>
  3. <artifactId>message-spring-boot-starter</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

然后在配置文件中配置相关的信息

  1. message:
  2. email:
  3. username: Aden
  4. password: 123456
  5. key: HJFHADJSFBDASFHUADSINF
  6. api-url: http://blog.qiyuan.run
  7. feishu:
  8. user-name: Aden
  9. pass-word: 654321
  10. key: HFJKADSBFJKADSJFKADSNFAD
  11. api-url: http://blog.qiyuan.run

测试

  1. @SpringBootApplication
  2. public class TeachApplication {
  3. public static void main(String[] args) {
  4. ConfigurableApplicationContext context = SpringApplication.run(TeachApplication.class, args);
  5. SendEmailMessageServiceImpl emailMessageService = context.getBean(SendEmailMessageServiceImpl.class);
  6. emailMessageService.sendMessage("你好,Starter!,这是一封邮件信息!\n\n");
  7. SendFeishuMessageServiceImpl feishuMessageService = context.getBean(SendFeishuMessageServiceImpl.class);
  8. feishuMessageService.sendMessage("你好,Starter!,这是一封飞书信息!");
  9. }
  10. }

结果
image-1668520760099

原文链接:https://www.cnblogs.com/onecoder/p/16894269.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号