• 开发一个自己的Spring Boot Starter


    什么是 Spring Boot Starter

    starter 是 SpringBoot 的一个重要的组成部分它相当于一个可以集成到SpringBoot项目中的模块,比如你想在SpringBoot项目中使用Redis,我们需要做的第一步就是去pom.xml中引入redis相关的start依赖,引入Redis的starter依赖后,我们就可以直接在idea中编写redis相关的代码

    同时,在 maven 中引入 starter 依赖之后,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置,它遵循“约定大于配置”的理念。

    为什么需要 Starter?

    理想情况: 开发者只需要关心调用哪些接口、传递哪些参数,就跟调用自己写的代码一样简单。

    开发 starter 的好处: 开发者引入之后,可以直接在 application.yml 中写配置,自动创建相应的客户端。

    如何开发Starter

    1.创建一个springboot项目

    2.导入需要的依赖,这里我们只需要勾上Spring Configuration Processor即可,这个依赖能够帮我们自动生成引入starter后在yml配置文件中的代码提示(往下看就知道了)

    3.删除项目中的多余结构

    将方框内maven的打jar包插件删除

    将SpringBoot 启动类删除

    4.开始编写自己需要的功能,这里我们编写一个可以通过两个属性(ak,sk)进行用户鉴权功能的客户端用例来演示

    编写实现业务的客户端类,该类有accessKey和secretKey两个属性

    1. package com.lqapiclientsdk.client;
    2. import cn.hutool.core.util.RandomUtil;
    3. import cn.hutool.http.HttpRequest;
    4. import cn.hutool.http.HttpResponse;
    5. import cn.hutool.http.HttpUtil;
    6. import cn.hutool.json.JSONUtil;
    7. import com.lqapiclientsdk.model.User;
    8. import com.lqapiclientsdk.utils.SignUtil;
    9. import lombok.extern.slf4j.Slf4j;
    10. import java.util.HashMap;
    11. import java.util.Map;
    12. //创建一个client.层:客户端层,负责与用户交互、处理用户请求,以及调用服务端提供的API接口等任务的部分。
    13. @Slf4j
    14. public class LqApiClient {
    15. private static final String GATEWAY_HOST="http://localhost:8090";
    16. String accessKey;
    17. String secretKey;
    18. public LqApiClient(String accessKey, String secretKey) {
    19. this.accessKey = accessKey;
    20. this.secretKey = secretKey;
    21. }
    22. public String ApiInvoke(Object requestParams, String apiUrl) {
    23. String jsonStr = JSONUtil.toJsonStr(requestParams);
    24. HttpResponse response = HttpRequest.post(apiUrl)
    25. .body(jsonStr)
    26. .addHeaders(getHeaderMap(jsonStr))
    27. .execute();
    28. log.info("调用该接口返回的结果状态码:" + response.getStatus());
    29. String result = response.body(); //hutool 的HttpResponse.body返回的响应体内容已经自动转换成String类型了
    30. return result;
    31. }
    32. public String getNameByPost(String name) {
    33. HashMap paramMap = new HashMap<>();
    34. paramMap.put("name", name);
    35. String result = HttpUtil.post("localhost:8123/api/name/", paramMap);
    36. System.out.println(result);
    37. return result;
    38. }
    39. public Map getHeaderMap(String body) {
    40. HashMap hashMap = new HashMap();
    41. hashMap.put("accessKey", accessKey);
    42. hashMap.put("secretKey", secretKey);
    43. hashMap.put("body", body);
    44. //生成随机数,发送给服务器
    45. hashMap.put("nonce", RandomUtil.randomNumbers(4));
    46. //生成以秒为单位的时间戳发送给服务器
    47. hashMap.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
    48. hashMap.put("sign", SignUtil.getSign(body, secretKey));
    49. return hashMap;
    50. }
    51. }

    为了能够在别的项目导入我们的starer后能够通过在yml文件中做配置的方式拿到对应属性的client对象,我们还需要写一个配置类

    1. package com.lqapiclientsdk;
    2. import com.lqapiclientsdk.client.LqApiClient;
    3. import lombok.Data;
    4. import org.springframework.boot.context.properties.ConfigurationProperties;
    5. import org.springframework.context.annotation.Bean;
    6. import org.springframework.context.annotation.ComponentScan;
    7. import org.springframework.context.annotation.Configuration;
    8. @ComponentScan
    9. @Configuration
    10. @ConfigurationProperties("lqapi.client")
    11. @Data//一定得要,不然到时在别的项目引用了这个sdk也无法再yml文件中做配置,因为配置的底层就是通过set方法
    12. public class LqApiClientConfig {
    13. String accessKey;
    14. String secretKey;
    15. @Bean
    16. public LqApiClient lqApiClient(){
    17. return new LqApiClient(accessKey,secretKey);
    18. }
    19. }

    写好配置类后,我们在resources下新建一个叫META-INF(不能小写)的目录,并在该目录下新建一个叫spring.factories的文件进行springboot的自动装配配置(不懂这一步的意义的小伙伴可以去了解一下springboot自动配置原理)

    打开spring.factories,做以下配置

    1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxx.xxxsdk.xxxConfig
    2. //等号后面填的是你刚刚创建的config配置类路径

    5.执行Maven生命周期中的clean后执行Install,即可将该starter打包成依赖包到你电脑本地的maven仓库中~

    \

    执行install后我们可以看到控制台输出了BUILD SUCCESS的日志,说明install成功

    6.测试使用效果

    打开别的项目,在pom.xml文件中引入我们刚刚starter项目的工组件名

    打开application.yml文件,我们输入刚刚在自定义config类中配置的prefix,可以看到神奇的事情发生了:我们的starter可以向springboot其他配置一样自动提示配置代码

    配置完成后我们就可以直接使用我们starter中的代码啦~ 至此开发自己的starter成功,感谢观看(・ω・)ノ

  • 相关阅读:
    SpringCloud 三种服务调用方式详解
    云渲染与传统渲染器的较量与融合
    分布式恢复 | 深入浅出MGR
    【C++】详解 void*
    ESP01S通过心知天气获取天气和时间信息
    车载SOA测试利器——Parasoft SOA自动化测试方案
    MySQL - 深入解析MySQL索引数据结构
    我只用CV大法就实现了小程序的tabBar
    重要文件即时搞定,不用插电就能打印,汉印MT800移动便携打印机上手
    蜂蜡/聚苯乙烯大孔树脂微球/硫酸盐修饰聚苯乙烯微球/草莓状银/聚苯乙烯-丙烯腈复合微球的研究
  • 原文地址:https://blog.csdn.net/m0_61721601/article/details/132666030