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

SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法

 更新時(shí)間:2019年04月23日 09:56:06   作者:Sans_  
這篇文章主要介紹了SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一.說(shuō)明

我們?cè)谑褂肧pringBoot的時(shí)候常常要引入一些Starter,例如spring-boot-starter-web,官方為我們提供了幾乎所有的默認(rèn)配置,很好的降低了使用框架時(shí)的復(fù)雜度,所以在用xxx-starter的時(shí)候,可以不用費(fèi)心去寫(xiě)一些繁瑣的配置文件,即使必要的配置在application.properties或application.yml中配置就可以了,當(dāng)你實(shí)現(xiàn)了一個(gè)Starter,可以在不同的項(xiàng)目中復(fù)用,非常方便,今天我們來(lái)編寫(xiě)自己的Starter以之前的短信業(yè)務(wù)為例。

Springboot短信業(yè)務(wù)調(diào)用: http://m.fzitv.net/article/160092.htm

spring-boot-starter-xxx是官方提供Starter的命名規(guī)則,非官方Starter的命名規(guī)則官方建議為 xxx-spring-boot-starter

二.搭建項(xiàng)目

建立SpringBoot項(xiàng)目,清除resources下的文件和文件夾

Maven依賴(lài)如下:

<dependencies>
    <!--封裝Starter核心依賴(lài) -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <version>2.1.3.RELEASE</version>
    </dependency>
    <!-- lombok 插件 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.6</version>
      <optional>true</optional>
    </dependency>
    <!-- 因?yàn)橐褂肦estTemplate和轉(zhuǎn)換Json,所以引入這兩個(gè)依賴(lài) -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.45</version>
    </dependency>
  </dependencies>

二.編寫(xiě)項(xiàng)目基礎(chǔ)類(lèi)

創(chuàng)建SendSMSDTO傳輸類(lèi),用于參數(shù)傳遞

/**
 * SMSDTO參數(shù)類(lèi)
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
@Data
public class SendSMSDTO {
  /**
   * 模板ID
   */
  private String templateid;
  /**
   * 參數(shù)
   */
  private String param;
  /**
   * 手機(jī)號(hào)
   */
  private String mobile;
  /**
   * 用戶(hù)穿透ID,可以為空
   */
  private String uid;
}

創(chuàng)建RestTemplateConfig配置類(lèi),用于調(diào)用短信接口

/**
 * RestTemplateConfig配置
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
@Configuration
public class RestTemplateConfig {
  @Bean
  public RestTemplate restTemplate( ) {
    return new RestTemplate();
  }
}

創(chuàng)建短信接口枚舉類(lèi),用于存放短信接口API地址

/**
 * 短信請(qǐng)求API枚舉
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
@Getter
public enum ENUM_SMSAPI_URL {
  SENDSMS("https://open.ucpaas.com/ol/sms/sendsms"),
  SENDBATCHSMS("https://open.ucpaas.com/ol/sms/sendsms_batch");
  private String url;
  ENUM_SMSAPI_URL(String url) {
    this.url = url;
  }
}

三.編寫(xiě)Starter自動(dòng)配置類(lèi)

創(chuàng)建SmsProperties配置屬性類(lèi),該類(lèi)主要用于讀取yml/properties信息

/**
 * SMS配置屬性類(lèi)
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention 使用ConfigurationProperties注解可將配置文件(yml/properties)中指定前綴的配置轉(zhuǎn)為bean
 */
@Data
@ConfigurationProperties(prefix = "sms-config")
public class SmsProperties {
  private String appid;
  private String accountSid;
  private String authToken;
}

創(chuàng)建短信核心服務(wù)類(lèi)

/**
 * 短信核心服務(wù)類(lèi)
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
public class SmsService {

  @Autowired
  private RestTemplate restTemplate;
  private String appid;
  private String accountSid;
  private String authToken;

  /**
   * 初始化
   */
  public SmsService(SmsProperties smsProperties) {
    this.appid = smsProperties.getAppid();
    this.accountSid = smsProperties.getAccountSid();
    this.authToken = smsProperties.getAuthToken();
  }

  /**
   * 單獨(dú)發(fā)送
   */
  public String sendSMS(SendSMSDTO sendSMSDTO){
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("sid", accountSid);
    jsonObject.put("token", authToken);
    jsonObject.put("appid", appid);
    jsonObject.put("templateid", sendSMSDTO.getTemplateid());
    jsonObject.put("param", sendSMSDTO.getParam());
    jsonObject.put("mobile", sendSMSDTO.getMobile());
    if (sendSMSDTO.getUid()!=null){
      jsonObject.put("uid",sendSMSDTO.getUid());
    }else {
      jsonObject.put("uid","");
    }
    String json = JSONObject.toJSONString(jsonObject);
    //使用restTemplate進(jìn)行訪(fǎng)問(wèn)遠(yuǎn)程Http服務(wù)
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    HttpEntity<String> httpEntity = new HttpEntity<String>(json, headers);
    String result = restTemplate.postForObject(ENUM_SMSAPI_URL.SENDSMS.getUrl(), httpEntity, String.class);
    return result;
  }

  /**
   * 群體發(fā)送
   */
  public String sendBatchSMS(SendSMSDTO sendSMSDTO){
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("sid", accountSid);
    jsonObject.put("token", authToken);
    jsonObject.put("appid", appid);
    jsonObject.put("templateid", sendSMSDTO.getTemplateid());
    jsonObject.put("param", sendSMSDTO.getParam());
    jsonObject.put("mobile", sendSMSDTO.getMobile());
    if (sendSMSDTO.getUid()!=null){
      jsonObject.put("uid",sendSMSDTO.getUid());
    }else {
      jsonObject.put("uid","");
    }
    String json = JSONObject.toJSONString(jsonObject);
    //使用restTemplate進(jìn)行訪(fǎng)問(wèn)遠(yuǎn)程Http服務(wù)
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    HttpEntity<String> httpEntity = new HttpEntity<String>(json, headers);
    String result = restTemplate.postForObject(ENUM_SMSAPI_URL.SENDBATCHSMS.getUrl(), httpEntity, String.class);
    return result;
  }
}

創(chuàng)建SmsAutoConfiguration自動(dòng)配置類(lèi),該類(lèi)主要用于創(chuàng)建核心業(yè)務(wù)類(lèi)實(shí)例

/**
 * 短信自動(dòng)配置類(lèi)
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
@Configuration 
@EnableConfigurationProperties(SmsProperties.class)//使@ConfigurationProperties注解生效
public class SmsAutoConfiguration {
  @Bean
  public SmsService getBean(SmsProperties smsProperties){
    SmsService smsService = new SmsService(smsProperties);
    return smsService;
  }
}

四.創(chuàng)建spring.factories文件

spring.factories該文件用來(lái)定義需要自動(dòng)配置的類(lèi),SpringBoot啟動(dòng)時(shí)會(huì)進(jìn)行對(duì)象的實(shí)例化,會(huì)通過(guò)加載類(lèi)SpringFactoriesLoader加載該配置文件,將文件中的配置類(lèi)加載到spring容器

在src/main/resources新建META-INF文件夾,在META-INF文件夾下新建spring.factories文件.配置內(nèi)容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.sms.starter.config.SmsAutoConfiguration

五.打包和測(cè)試

使用Maven插件,將項(xiàng)目打包安裝到本地倉(cāng)庫(kù)

新建測(cè)試項(xiàng)目,引入我們自己的Starter,Maven依賴(lài)如下:

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 添加我們自己的starter-->
    <dependency>
      <groupId>com.sms.starter</groupId>
      <artifactId>sms-spring-boot-starter</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

配置測(cè)試項(xiàng)目的application.yml

sms-config:
 account-sid: //這里填寫(xiě)平臺(tái)獲取的ID和KEY
 auth-token:  //這里填寫(xiě)平臺(tái)獲取的ID和KEY
 appid:    //這里填寫(xiě)平臺(tái)獲取的ID和KEY

參數(shù)填寫(xiě)自己的手機(jī)號(hào)和申請(qǐng)的模板以及對(duì)應(yīng)的參數(shù)

/**
 * 測(cè)試短信DEMO
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
@RestController
@RequestMapping("/sms")
public class TestController {
  @Autowired
  private SmsService smsService;
  /**
   * 短信測(cè)試
   * @Attention
   * @Author: Sans
   * @CreateTime: 2019/4/20 
   */
  @RequestMapping(value = "/sendsmsTest",method = RequestMethod.GET)
  public String sendsmsTest(){
    //創(chuàng)建傳輸類(lèi)設(shè)置參數(shù)
    SendSMSDTO sendSMSDTO = new SendSMSDTO();
    sendSMSDTO.setMobile("");   //手機(jī)號(hào)
    sendSMSDTO.setTemplateid(""); //模板
    sendSMSDTO.setParam("");   //參數(shù)
    return smsService.sendSMS(sendSMSDTO);
  }
}

項(xiàng)目源碼: https://gitee.com/liselotte/sms-spring-boot-starter

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java集合框架 arrayblockingqueue應(yīng)用分析

    java集合框架 arrayblockingqueue應(yīng)用分析

    ArrayBlockingQueue是一個(gè)由數(shù)組支持的有界阻塞隊(duì)列。此隊(duì)列按 FIFO(先進(jìn)先出)原則對(duì)元素進(jìn)行排序。隊(duì)列的頭部 是在隊(duì)列中存在時(shí)間最長(zhǎng)的元素
    2012-11-11
  • Maven deploy配置方法詳解

    Maven deploy配置方法詳解

    這篇文章主要介紹了Maven deploy配置方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot框架DataSource多數(shù)據(jù)源配置方式

    SpringBoot框架DataSource多數(shù)據(jù)源配置方式

    這篇文章主要介紹了SpringBoot框架DataSource多數(shù)據(jù)源配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot?MP簡(jiǎn)單的分頁(yè)查詢(xún)測(cè)試實(shí)現(xiàn)步驟分解

    SpringBoot?MP簡(jiǎn)單的分頁(yè)查詢(xún)測(cè)試實(shí)現(xiàn)步驟分解

    好久沒(méi)水后端的東西了,最近在做vue項(xiàng)目寫(xiě)前端的代碼,所以cloud也停進(jìn)度了,吃完飯突然記得我沒(méi)有在博客里寫(xiě)分頁(yè)的東西,雖然項(xiàng)目中用到了,但是沒(méi)有拎出來(lái),這里就拎出來(lái)看看
    2023-04-04
  • Spring Mvc中攔截器Interceptor用法解讀

    Spring Mvc中攔截器Interceptor用法解讀

    這篇文章主要介紹了Spring Mvc中攔截器Interceptor用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot中自定義參數(shù)綁定步驟詳解

    SpringBoot中自定義參數(shù)綁定步驟詳解

    這篇文章主要介紹了SpringBoot中自定義參數(shù)綁定步驟詳解,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-02-02
  • Java原生HttpClient的使用詳解

    Java原生HttpClient的使用詳解

    Java開(kāi)發(fā)語(yǔ)言中實(shí)現(xiàn)HTTP請(qǐng)求的方法主要有兩種:一種是JAVA的標(biāo)準(zhǔn)類(lèi)HttpUrlConnection,比較原生的實(shí)現(xiàn)方法;另一種是第三方開(kāi)源框架HTTPClient。本文就將詳細(xì)講講Java中原生HttpClient的使用,需要的可以參考一下
    2022-04-04
  • Java如何替換RequestBody和RequestParam參數(shù)的屬性

    Java如何替換RequestBody和RequestParam參數(shù)的屬性

    近期由于接手的老項(xiàng)目中存在所有接口中新增一個(gè)加密串來(lái)給接口做一個(gè)加密效果,所以就研究了一下Http請(qǐng)求鏈路,發(fā)現(xiàn)可以通過(guò)?javax.servlet.Filter去實(shí)現(xiàn),這篇文章主要介紹了Java替換RequestBody和RequestParam參數(shù)的屬性,需要的朋友可以參考下
    2023-10-10
  • Spring Cloud Zuul自定義過(guò)濾器的實(shí)現(xiàn)

    Spring Cloud Zuul自定義過(guò)濾器的實(shí)現(xiàn)

    這篇文章主要介紹了自定義Spring Cloud Zuul過(guò)濾器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MyBatis?@Select注解介紹:基本用法與動(dòng)態(tài)SQL拼寫(xiě)方式

    MyBatis?@Select注解介紹:基本用法與動(dòng)態(tài)SQL拼寫(xiě)方式

    這篇文章主要介紹了MyBatis?@Select注解介紹:基本用法與動(dòng)態(tài)SQL拼寫(xiě)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

泽库县| 临桂县| 新乐市| 灌云县| 永修县| 泰来县| 葵青区| 青神县| 肥乡县| 北海市| 于都县| 垣曲县| 中宁县| 桦川县| 澳门| 筠连县| 宣化县| 黔江区| 五河县| 扎兰屯市| 苏尼特左旗| 延庆县| 塔河县| 花垣县| 苍梧县| 龙海市| 页游| 襄汾县| 聂拉木县| 新昌县| 吴忠市| 武威市| 和田县| 荆州市| 大庆市| 昌都县| 漯河市| 茂名市| 大名县| 漳平市| 甘肃省|