自定义Spring Boot Starter:简化短信服务集成

news2024/9/28 13:22:41

在现代应用程序中,短信服务是一个常见的需求,用于发送验证码、通知等。为了简化短信服务的集成和配置,我们可以通过自定义Spring Boot Starter来实现。Spring Boot Starter是一种特殊的依赖项,它包含了实现特定功能所需的库和组件,以及相应的配置文件。通过引入Starter,开发者可以快速地将相关的依赖项添加到项目中,而无需手动配置每个依赖项。

Spring Boot Starter的优势

  1. 简化依赖管理:Starter通过定义一组相关的依赖项,简化了Maven或Gradle等构建工具中的依赖管理。

  2. 约定优于配置:Starter遵循“约定优于配置”的原则,提供了默认的配置,减少了手动配置的工作量。

  3. 自动配置:Spring Boot根据classpath下的类、资源文件和META-INF/spring.factories配置文件自动配置项目所需的各种组件和服务。

  4. 易于扩展:开发者可以通过自定义Starter来扩展Spring Boot的功能,满足特定项目的需求。

应用场景

  1. Web应用开发:通过引入spring-boot-starter-web,可以快速搭建基于Spring MVC的Web应用程序。

  2. 数据访问层开发:使用spring-boot-starter-data-jpa或spring-boot-starter-jdbc等Starter,简化与关系型数据库的交互。

  3. 消息队列集成:通过spring-boot-starter-amqp等Starter,方便地集成RabbitMQ等消息队列中间件。

  4. 安全性控制:引入spring-boot-starter-security,为应用程序添加身份验证、授权等安全功能。

  5. 微服务架构:在构建微服务时,可以利用Spring Cloud提供的各种Starter来实现服务发现、配置管理、熔断降级等功能。

实战案例:自定义短信服务Starter

1. 创建Starter项目

首先,我们需要创建一个新的Maven项目,用于存放我们的Starter代码。

xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>sms-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- 添加你的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- 短信服务相关依赖 -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.0</version>
        </dependency>
    </dependencies>
</project>

2. 创建自动配置类

接下来,我们需要创建一个自动配置类,这个类将包含我们的自定义配置。

java
package com.example.sms;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(SmsProperties.class)
public class SmsAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public SmsService smsService(SmsProperties properties) {
        return new AliyunSmsServiceImpl(properties);
    }
}

3. 创建配置属性类

我们需要一个配置属性类,用于绑定外部配置。

java
package com.example.sms;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {
    private String accessKeyId;
    private String accessKeySecret;
    private String signName;
    // 省略getter和setter方法
}

4. 创建服务实现类

接下来,我们创建一个服务实现类,这个类将被我们的自动配置类注入。

java
package com.example.sms;

public class AliyunSmsServiceImpl implements SmsService {
    private final SmsProperties properties;

    public AliyunSmsServiceImpl(SmsProperties properties) {
        this.properties = properties;
    }

    @Override
    public void sendSms(String phoneNumber, String templateCode, String templateParam) {
        // 实现发送短信的逻辑
    }
}

5. 创建资源文件

在src/main/resources目录下创建META-INF文件夹,并在其中创建spring.factories文件,指定自动配置类。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.sms.SmsAutoConfiguration

6. 使用Starter

现在,我们可以在任何Spring Boot项目中使用我们自定义的Starter了。只需添加以下依赖:

xml
<dependency>
    <groupId>com.example</groupId>
    <artifactId>sms-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

并在application.properties中添加配置:

sms.accessKeyId=你的AccessKeyId
sms.accessKeySecret=你的AccessKeySecret
sms.signName=你的签名

7. 测试

最后,我们可以在Spring Boot应用中测试我们的Starter。

java
package com.example.demo;

import com.example.sms.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

    @Autowired
    private SmsService smsService;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        smsService.sendSms("13800138000", "SMS_xxxx", "验证码{code},您正在进行短信验证。");
    }
}

运行Spring Boot应用,你将看到短信服务被自动配置并发送短信。

结论

通过这个实战案例,你可以看到创建一个自定义的Spring Boot Starter并不复杂。通过这种方式,你可以轻松地在多个项目中共享和重用配置和代码,简化短信服务的集成和配置。自定义Starter不仅可以提高开发效率,还可以促进最佳实践的实施,使得代码更加模块化和可维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】栈和队列(有完整的模拟实现代码!)

1、栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。…

爬取元气手机壁纸简单案例(仅用于教学,禁止任何非法获利)

爬虫常用的库 爬虫&#xff08;Web Scraping&#xff09;是一种从网页上提取数据的技术。在 Python 中&#xff0c;有许多库可以帮助实现这一目标。以下是一些常用的爬虫库&#xff0c;以及对 BeautifulSoup 的详细介绍。 常用爬虫库 1.Requests ​ a.功能&#xff1a;用于发…

利用 Llama-3.1-Nemotron-51B 推进精度-效率前沿的发展

今天&#xff0c;英伟达™&#xff08;NVIDIA&#xff09;发布了一款独特的语言模型&#xff0c;该模型具有无与伦比的准确性和效率性能。Llama 3.1-Nemotron-51B 源自 Meta 的 Llama-3.1-70B&#xff0c;它采用了一种新颖的神经架构搜索&#xff08;NAS&#xff09;方法&#…

MySQL的安装(环境为CentOS云服务器)

卸载内置环境 我们初期使用root账号&#xff0c;后期再切换成普通账号 使用 ps axj | grep mysql 查看系统中是否有MySQL相关的进程 使用 systemctl stop mysqld 关停进程 使用 rpm -qa | grep mysql 查看MySQL相关的安装包 使用 rpm -qa | grep mysql | xargs yum -y remo…

试用Debian12.7和Ubuntu24.4小札

Debian GNU/Linux 12 (bookworm)和Ubuntu 24.04.1 LTS是现阶段&#xff08;2024年9月26日&#xff09;两个发行版的最新版本。Ubuntu Server版本默认就不带桌面&#xff08;ubuntu-24.04-live-server-amd64.iso&#xff09;&#xff0c;这个默认就是最小化安装&#xff08;安装…

长芯微LPQ76930锂电池组保护芯片完全P2P替代BQ76930

LPQ76930系列芯片可作为 3-15 节串联电池组监控和保护解决方案的一部分。通过 TWI 通信&#xff0c;MCU 可以使用 LPQ76930 来执行电池管理功能1&#xff0c;例如监测&#xff08;电池电压、电池 组电流、电池组温度&#xff09;、保护&#xff08;控制充电/放电 FET&#xff0…

java中的强软弱虚

在java中对象的引用有强、软、弱、虚四种&#xff0c;这些引用级别的区别主要体现在对象的生命周期、回收时机的不同。 文章目录 准备工作1. 设置内存2. 内存检测 强引用软引用弱引用虚引用 准备工作 1. 设置内存 为方便调试&#xff0c;将内存设置为16MB 依次点击菜单栏的R…

springboot基于学习行为的学生选课成绩分析系统设计与实现

目录 功能介绍使用说明系统实现截图开发核心技术介绍&#xff1a;开发步骤编译运行核心代码部分展示开发环境需求分析详细视频演示源码获取 功能介绍 学生 课程学习行为数据录入: 学生填写每门课程的学习时长、学习态度、课后作业质量等。 课程学习行为数据修改: 学生可修改已…

基于SpringBoot+Vue的大学生公考服务平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

php 平滑重启 kill -SIGUSR2 <PID> pgrep命令查看进程号

有时候我们使用nginx 大家都知道平滑重启命令: /web/nginx/sbin/nginx -s reload 但大家对php-fpm 重启 可能就是简单暴力的kill 直接搞起了 下面介绍一个sh 文件名保存为start_php.sh 来对php-fpm 进行平滑重启 #!/bin/bash# 检查 PHP-FPM 是否运行 if ! pgrep php-…

JAVA开源项目 技术交流分享平台 计算机毕业设计

本文项目编号 T 053 &#xff0c;文末自助获取源码 \color{red}{T053&#xff0c;文末自助获取源码} T053&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 1.Introduction2.Convolutional Block Attention ModuleExperimentsConclusion 论文题目&#xff1a;CBAM: Convolutional Block Attention Module&#xff08;CBAM&#xff1a;卷积注意力机制&#xff09;   论文链接&#xff1a;点击跳转   代码链接&#xff1a…

运维,36岁,正在经历中年危机,零基础入门到精通,收藏这一篇就够了

我今年36岁&#xff0c;运维经理&#xff0c;985硕士毕业&#xff0c;目前正在经历中年危机&#xff0c;真的很焦虑&#xff0c;对未来充满担忧。不知道这样的日子还会持续多久&#xff0c;突然很想把这些年的经历记录下来&#xff0c;那就从今天开始吧。 先说一下我的中年危机…

中国科学技术大学《2020年+2021年845自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《25届中国科学技术大学845自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2020年真题 2021年真题 Part1&#xff1a;2020年2021年完整版真题 2020年真…

python实战三:使用循环while模拟用户登录

# (1)初始变量 i0 while i<3: # (2)条件判断# (3)语句块user_name input(请输入您的用户名&#xff1a;)pwd input(请输入您的密码&#xff1a;)#登陆判断 if elseif user_namewwl and pwd66666666:print(系统正在登录&#xff0c;请稍后)#需要改变循环变量&#xff0c;目…

一文读懂:监督式微调(SFT)

监督式微调 (Supervised fine-tuning)&#xff0c;也就是SFT&#xff0c;就是拿一个已经学了不少东西的大型语言模型&#xff0c;然后用一些特定的、已经标记好的数据来教它怎么更好地完成某个特定的任务。就好比你已经学会了做饭&#xff0c;但是要特别学会怎么做川菜&#xf…

以流量裂变为目标,驱动动销新潮流

在当今数字化商业世界&#xff0c;流量成为关键。而以流量裂变为目标的动销策略&#xff0c;正成为企业致胜法宝。 流量裂变&#xff0c;即让流量呈指数级增长。它依靠用户传播分享&#xff0c;能快速扩大品牌曝光度与影响力&#xff0c;提高获客效率。动销则是推动产品销售&am…

【幂简集成】手机归属地查询API,精准获取号码所在地,提升数据准确率

在互联网与移动通信技术迅猛进步的背景下&#xff0c;手机号码已成为企业经营及个人生活中的重要工具。对众多企业而言&#xff0c;通过手机号归属地查询&#xff0c;既可优化营销策略&#xff0c;又能提高客户服务精确性。手机号归属地查询 API 的问世&#xff0c;旨在满足这一…

AI产品经理学习路径:从零基础到精通,从此篇开始!

一、AI产品经理和和通用型产品经理的异同&#xff1a; 市面上不同的公司对产品经理的定位有很大的差别&#xff0c;一名合格的产品经理是能对软件产品整个生命周期负责的人。 思考框架相同&#xff1a; AI产品经理和通用型软件产品经理的底层思考框架是一样的&#xff0c;都是…

旺店通ERP集成金蝶K3(旺店通主供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件&#xff0c;它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标&#xff0c;计划与流程控制为主线&#xff0c;通过对成…