最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3集成SMS4J實(shí)現(xiàn)短信+OA雙渠道消息發(fā)送

 更新時(shí)間:2026年04月05日 10:20:42   作者:碼路星河  
本文主要介紹了SpringBoot3快速集成SMS4J,10分鐘搞定短信+OA雙渠道消息發(fā)送,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

做后端業(yè)務(wù)開發(fā),短信發(fā)送是繞不開的基礎(chǔ)功能,但直接對(duì)接各家云廠商短信SDK,不僅配置繁瑣、業(yè)務(wù)耦合度高,換個(gè)服務(wù)商就要重構(gòu)大半代碼,純純費(fèi)力不討好。而且日常項(xiàng)目里,除了短信驗(yàn)證碼,OA系統(tǒng)消息通知也是高頻需求,單獨(dú)對(duì)接OA接口又要額外寫一套邏輯。最近用SpringBoot3做項(xiàng)目,直接上手了SMS4J這個(gè)開源工具,不僅適配SpringBoot3.x、一鍵切換多廠商短信,還能同步集成OA消息通知,一套工具搞定雙渠道發(fā)送。

一、項(xiàng)目環(huán)境與核心依賴

先確認(rèn)基礎(chǔ)環(huán)境,我這邊用的是SpringBoot 3.2.5、JDK17。

第一步先引入Maven核心依賴,直接在pom.xml中添加官方starter。

<!-- SMS4J SpringBoot3啟動(dòng)器 官方最新穩(wěn)定版3.3.5 -->
<dependency>
    <groupId>org.dromara.sms4j</groupId>
    <artifactId>sms4j-spring-boot-starter</artifactId>
    <version>3.3.5</version>
</dependency>
<!-- SMS4J OA消息通知 -->
<dependency>
    <groupId>org.dromara.sms4j</groupId>
    <artifactId>sms4j-oa-core</artifactId>
    <version>3.3.5</version>
</dependency>

依賴引入后刷新Maven,等待下載完成即可,不用額外做依賴排除。

二、核心配置:短信+OA一體化配置

接下來是核心配置環(huán)節(jié),不用寫自定義配置類,直接在application.yml中同時(shí)配置短信和OA消息,一份配置文件管理雙渠道,切換廠商和OA地址只改配置,業(yè)務(wù)代碼零改動(dòng)。我以阿里云短信+通用OA通知為例,配置邏輯清晰易懂。

提前準(zhǔn)備好阿里云短信參數(shù):AccessKey、Secret、短信簽名、模板ID;OA相關(guān)參數(shù):OA接口地址、應(yīng)用密鑰、審批人/接收人標(biāo)識(shí),都是后臺(tái)可直接獲取的基礎(chǔ)參數(shù)。

spring:
  application:
    name: sms4j-demo
# SMS4J核心配置,3.3.5版本支持短信+OA雙配置
sms:
  config-type: yaml
  blends:
    # 阿里云短信配置
    aliyun:
      supplier: alibaba
      accessKeyId: 您的阿里云AccessKey
      accessKeySecret: 您的阿里云Secret
      signature: 短信簽名
      templateId: SMS_215125134
      templateName: code
      requestUrl: dysmsapi.aliyuncs.com
   oas:
     oaDingTalkByYaml: # configId
       isEnable: true # 表示該配置是否生效(默認(rèn)生效,false表示不生效)
       supplier: ding_ding # 廠商標(biāo)識(shí)
       tokenId: 您的accessKey # webhook 中的 access_token
       sign: 您的sign # 安全設(shè)置在驗(yàn)簽?zāi)J较虏诺拿罔€,非驗(yàn)簽?zāi)J經(jīng)]有此值

不管是新增騰訊云、華為云短信,還是調(diào)整OA對(duì)接參數(shù),都只需要在blends下新增或修改配置塊,業(yè)務(wù)邏輯完全不用動(dòng),多渠道切換和擴(kuò)展極其靈活,這也是SMS4J的核心優(yōu)勢(shì)。

三、代碼實(shí)現(xiàn):短信+OA雙發(fā)送接口

配置完成后直接寫業(yè)務(wù)代碼,SMS4J通過工廠類統(tǒng)一管理渠道實(shí)例,短信和OA發(fā)送調(diào)用邏輯高度一致,代碼極度簡(jiǎn)潔,適配登錄驗(yàn)證碼、業(yè)務(wù)審批通知等場(chǎng)景。

import cn.hutool.core.util.RandomUtil;
import org.dromara.oa.api.OaSender;
import org.dromara.oa.comm.entity.Request;
import org.dromara.oa.comm.entity.Response;
import org.dromara.oa.comm.enums.MessageType;
import org.dromara.oa.core.provider.factory.OaFactory;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.entity.SmsResponse;
import org.dromara.sms4j.core.factory.SmsFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.ArrayList;
 
@RestController
@RequestMapping("/sms")
public class SmsController {
 
    /**
     * 通用短信驗(yàn)證碼發(fā)送接口
     * @param phone 接收短信的手機(jī)號(hào)
     * @return 發(fā)送結(jié)果反饋
     */
    @GetMapping("/send/{phone}")
    public String sendSmsCode(@PathVariable String phone) {
        // 獲取對(duì)應(yīng)廠商標(biāo)識(shí)的短信實(shí)例,和yml配置一一對(duì)應(yīng)
        SmsBlend smsBlend = SmsFactory.getSmsBlend("aliyun");
        // 生成6位純數(shù)字驗(yàn)證碼,適配絕大多數(shù)驗(yàn)證碼場(chǎng)景
        String code = RandomUtil.randomNumbers(6);
        // 執(zhí)行短信發(fā)送,參數(shù)順序嚴(yán)格匹配短信模板變量順序
        SmsResponse response = smsBlend.sendMessage(phone, code);
        // 結(jié)果返回,開發(fā)階段可直接返回驗(yàn)證碼調(diào)試,生產(chǎn)環(huán)境建議隱藏
        if (response.isSuccess()) {
            return "短信發(fā)送成功,驗(yàn)證碼:" + code;
        }
        return "短信發(fā)送失敗,失敗原因:" + response.getData().toString();
    }
 
    /**
     * 通用OA通知發(fā)送接口
     * @param phone 接收通知的手機(jī)號(hào)
     * @return 發(fā)送結(jié)果反饋
     */
    @GetMapping("/send/oa/notice/{phone}")
    public String sendOANotice(@PathVariable String phone) {
        String configId = "oaDingTalkByYaml";
        OaSender alarm = OaFactory.getSmsOaBlend(configId);
        Request request = new Request();
        ArrayList<String> phones = new ArrayList<>();
        phones.add(phone);
        // 支持通過手機(jī)號(hào)@
        request.setPhoneList(phones);
        // 支持@all
        // request.setIsNoticeAll(true);
        request.setContent("測(cè)試消息");
        Response response = alarm.sender(request, MessageType.DING_TALK_TEXT);
        // 結(jié)果返回
        if (response.isSuccess()) {
            return "OA通知消息發(fā)送成功";
        }
        return "OA通知消息發(fā)送失敗,失敗原因:" + response.getData().toString();
    }
}

注意:模板變量順序要和配置、后臺(tái)模板完全匹配,OA消息可根據(jù)內(nèi)部需求調(diào)整模板內(nèi)容,支持文本、審批提醒等多種格式,調(diào)用方式和短信完全一致,學(xué)習(xí)成本極低。

四、核心避坑提示

  • 參數(shù)一致性:短信和OA的密鑰、地址、模板ID必須和后臺(tái)完全一致,空格、字符錯(cuò)誤會(huì)直接導(dǎo)致發(fā)送失??;
  • 渠道標(biāo)識(shí)對(duì)應(yīng):SmsFactory獲取實(shí)例的標(biāo)識(shí),必須和yml中blends下的配置名一一對(duì)應(yīng),不可寫錯(cuò);
  • 生產(chǎn)環(huán)境規(guī)范:敏感密鑰切勿硬編碼,建議放到Nacos、Apollo配置中心,OA內(nèi)網(wǎng)地址做好權(quán)限管控;
  • 單渠道 fallback:可加判斷邏輯,某一渠道失敗時(shí),另一渠道兜底,提升消息送達(dá)率。

五、總結(jié)

整體集成全程不到10分鐘,依托SMS4J 3.3.5最新版本,SpringBoot3集成零兼容問題,不僅搞定了多廠商短信的解耦對(duì)接,還順帶實(shí)現(xiàn)了OA消息通知,一套框架管理雙渠道消息,代碼簡(jiǎn)潔、擴(kuò)展靈活。不管是中小型項(xiàng)目的基礎(chǔ)消息功能,還是需要多渠道災(zāi)備的業(yè)務(wù)場(chǎng)景,都能快速落地。

到此這篇關(guān)于SpringBoot3集成SMS4J實(shí)現(xiàn)短信+OA雙渠道消息發(fā)送的文章就介紹到這了,更多相關(guān)SpringBoot3集成SMS4J雙渠道消息發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用IDEA創(chuàng)建maven父子工程項(xiàng)目 (圖文)

    使用IDEA創(chuàng)建maven父子工程項(xiàng)目 (圖文)

    本文主要介紹了使用IDEA創(chuàng)建maven父子工程項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java在算法題中的輸入問題實(shí)例詳解

    Java在算法題中的輸入問題實(shí)例詳解

    在校招筆試中,有的時(shí)候我們要自己設(shè)計(jì)輸入輸出,所以下面這篇文章主要給大家介紹了關(guān)于Java在算法題中的輸入問題,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • SSL證書部署+SpringBoot實(shí)現(xiàn)HTTPS安全訪問的操作方法

    SSL證書部署+SpringBoot實(shí)現(xiàn)HTTPS安全訪問的操作方法

    文章介紹了SSL和HTTPS的工作原理,包括握手階段和安全數(shù)據(jù)傳輸階段,通過模擬HTTPS請(qǐng)求,展示了如何生成自簽名證書并配置Spring Boot應(yīng)用程序以支持HTTPS,總結(jié)指出,SSL和HTTPS對(duì)于保護(hù)網(wǎng)絡(luò)安全至關(guān)重要,感興趣的朋友一起看看吧
    2025-02-02
  • Spring MVC+mybatis實(shí)現(xiàn)注冊(cè)登錄功能

    Spring MVC+mybatis實(shí)現(xiàn)注冊(cè)登錄功能

    這篇文章主要為大家詳細(xì)介紹了Spring MVC+mybatis實(shí)現(xiàn)注冊(cè)登錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id

    如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id

    這篇文章主要介紹了如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java token生成和校驗(yàn)的實(shí)例代碼

    java token生成和校驗(yàn)的實(shí)例代碼

    這篇文章主要介紹了java token生成和校驗(yàn)的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 詳解Java單元測(cè)試之JUnit篇

    詳解Java單元測(cè)試之JUnit篇

    這篇文章主要介紹了詳解Java單元測(cè)試之JUnit篇,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java通過JNI 調(diào)用動(dòng)態(tài)鏈接庫DLL操作

    Java通過JNI 調(diào)用動(dòng)態(tài)鏈接庫DLL操作

    這篇文章主要介紹了Java通過JNI 調(diào)用動(dòng)態(tài)鏈接庫DLL操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序

    Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序

    這篇文章主要介紹了Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序,主要通過案例用TreeSet集合存儲(chǔ)多個(gè)學(xué)生信息,并遍歷該集合,要按照總分從高到低進(jìn)行排序,下文介紹需要的朋友可以參考一下
    2022-04-04
  • SpringCloud連接不上遠(yuǎn)程N(yùn)acos問題排查

    SpringCloud連接不上遠(yuǎn)程N(yùn)acos問題排查

    本文主要介紹了SpringCloud連接不上遠(yuǎn)程N(yùn)acos問題排查,可能是因?yàn)槲撮_放端口,或集群內(nèi)部通信異常等,下面就來介紹一下問題解決,感興趣的可以了解一下
    2024-06-06

最新評(píng)論

漯河市| 石嘴山市| 灵璧县| 鄢陵县| 宽甸| 贞丰县| 莱西市| 岚皋县| 隆林| 新郑市| 双桥区| 峡江县| 富民县| 会泽县| 深水埗区| 萨嘎县| 安国市| 贺州市| 突泉县| 古丈县| 阿拉善左旗| 慈溪市| 新乡市| 沂源县| 荣成市| 昌江| 纳雍县| 阜阳市| 沿河| 胶州市| 古浪县| 阿拉善右旗| 淮阳县| 历史| 高平市| 肥东县| 邳州市| 饶平县| 五华县| 铜山县| 德安县|