中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot封裝自己的Starter的實現方法

發布時間:2020-08-30 18:57:49 來源:腳本之家 閱讀:199 作者:Sans_ 欄目:編程語言

一.說明

我們在使用SpringBoot的時候常常要引入一些Starter,例如spring-boot-starter-web,官方為我們提供了幾乎所有的默認配置,很好的降低了使用框架時的復雜度,所以在用xxx-starter的時候,可以不用費心去寫一些繁瑣的配置文件,即使必要的配置在application.properties或application.yml中配置就可以了,當你實現了一個Starter,可以在不同的項目中復用,非常方便,今天我們來編寫自己的Starter以之前的短信業務為例。

Springboot短信業務調用: https://www.jb51.net/article/160092.htm

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

二.搭建項目

建立SpringBoot項目,清除resources下的文件和文件夾

SpringBoot封裝自己的Starter的實現方法

Maven依賴如下:

<dependencies>
    <!--封裝Starter核心依賴 -->
    <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>
    <!-- 因為要使用RestTemplate和轉換Json,所以引入這兩個依賴 -->
    <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>

二.編寫項目基礎類

創建SendSMSDTO傳輸類,用于參數傳遞

/**
 * SMSDTO參數類
 * @Author Sans
 * @CreateTime 2019/4/20 
 * @attention
 */
@Data
public class SendSMSDTO {
  /**
   * 模板ID
   */
  private String templateid;
  /**
   * 參數
   */
  private String param;
  /**
   * 手機號
   */
  private String mobile;
  /**
   * 用戶穿透ID,可以為空
   */
  private String uid;
}

創建RestTemplateConfig配置類,用于調用短信接口

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

創建短信接口枚舉類,用于存放短信接口API地址

/**
 * 短信請求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;
  }
}

三.編寫Starter自動配置類

創建SmsProperties配置屬性類,該類主要用于讀取yml/properties信息

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

創建短信核心服務類

/**
 * 短信核心服務類
 * @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();
  }

  /**
   * 單獨發送
   */
  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進行訪問遠程Http服務
    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;
  }

  /**
   * 群體發送
   */
  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進行訪問遠程Http服務
    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;
  }
}

創建SmsAutoConfiguration自動配置類,該類主要用于創建核心業務類實例

/**
 * 短信自動配置類
 * @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;
  }
}

四.創建spring.factories文件

spring.factories該文件用來定義需要自動配置的類,SpringBoot啟動時會進行對象的實例化,會通過加載類SpringFactoriesLoader加載該配置文件,將文件中的配置類加載到spring容器

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

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

五.打包和測試

使用Maven插件,將項目打包安裝到本地倉庫

SpringBoot封裝自己的Starter的實現方法

新建測試項目,引入我們自己的Starter,Maven依賴如下:

<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>

配置測試項目的application.yml

sms-config:
 account-sid: //這里填寫平臺獲取的ID和KEY
 auth-token:  //這里填寫平臺獲取的ID和KEY
 appid:    //這里填寫平臺獲取的ID和KEY

參數填寫自己的手機號和申請的模板以及對應的參數

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

項目源碼: https://gitee.com/liselotte/sms-spring-boot-starter

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆云县| 女性| 莱阳市| 沂南县| 临漳县| 桓台县| 阳高县| 沧州市| 九江市| 宁武县| 卓尼县| 玉林市| 闽侯县| 昌吉市| 黄石市| 杨浦区| 涿鹿县| 井冈山市| 嫩江县| 宜君县| 徐闻县| 河东区| 仙桃市| 奎屯市| 南京市| 荆门市| 乐至县| 青海省| 平罗县| 疏勒县| 应用必备| 阜宁县| 电白县| 潍坊市| 蕉岭县| 江安县| 什邡市| 应城市| 淮南市| 南汇区| 英超|