• 【云原生】SpringCloud-Spring Boot Starter使用测试


    目录

    Spring Boot Starter是什么?

    以前传统的做法

    使用 Spring Boot Starter 之后

    starter 的理念:

    starter 的实现:

    ?创建Spring Boot Starter步骤

    在idea新建一个starter项目、直接执行下一步即可生成项目。

    ?在xml中加入如下配置文件:

    创建 proterties 类来保存配置信息

    创建业务类:

    创建 AutoConfiguration

    测试如下:


    Spring Boot Starter是什么?

    Spring Boot Starter 是在 SpringBoot 组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种 Spring Boot Starter 包可以快速搭建出一个项目的脚手架。

    比如我们经常用的一些:

    spring-boot-starter-web:

    spring-boot-starter-data-redis:

    spring-boot-starter-data-mongodb:

    spring-boot-starter-data-jpa:

    spring-boot-starter-activemq:

    总体来说就是 starter 是一种对依赖的合成。

    以前传统的做法

    在没有 starter 之前,传统的SSM项目、假如我想要在 Spring 中使用 jpa,可能需要做以下操作:

    首先在 Maven 中引入使用的数据库的依赖>>然后引入 jpa 的依赖>>在xml中配置一些属性信息>>调试调用直到可以正常运行。

    上面这样的操作会有一些问题、比如:

    如果过程比较繁琐,这样一步步操作会增加出错的可能性。

    在配置的时候也会划掉大量的时间、对于新手和小白不太友好。

    使用 Spring Boot Starter 之后

    starter 的主要目的就是为了解决上面的这些问题

    starter 的理念:

    starter 会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦。需要注意的是不同的 starter 是为了解决不同的依赖,所以它们内部的实现可能会有很大的差异,例如 jpa 的 starter 和 Redis 的 starter 可能实现就不一样,这是因为 starter 的本质在于 synthesize,这是一层在逻辑层面的抽象,也许这种理念有点类似于 Docker,因为它们都是在做一个 “包装” 的操作,如果你知道 Docker 是为了解决什么问题的,也许你可以用 Docker 和 starter 做一个类比。

    starter 的实现:

    虽然不同的 starter 实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties 和 AutoConfiguration。因为 Spring Boot 坚信 “约定大于配置” 这一理念,所以我们使用 ConfigurationProperties 来保存我们的配置,并且这些配置都可以有一个默认值,即在我们没有主动覆写原始配置的情况下,默认值就会生效,这在很多情况下是非常有用的。除此之外,starter 的 ConfigurationProperties 还使得所有的配置属性被聚集到一个文件中(一般在 resources 目录下的 application.properties),这样我们就告别了 Spring 项目中 XML 地狱。

    上面的 starter 依赖的 jar 和我们自己手动配置的时候依赖的 jar 并没有什么不同,所以我们可以认为 starter 其实是把这一些繁琐的配置操作交给了自己,而把简单交给了用户。除了帮助用户去除了繁琐的构建操作,在 “约定大于配置” 的理念下,ConfigurationProperties 还帮助用户减少了无谓的配置操作。并且因为application.properties文件的存在,即使需要自定义配置,所有的配置也只需要在一个文件中进行,使用起来非常方便。采用的starter都上面都给大家列出来了。

    创建Spring Boot Starter步骤

    创建starter 项目

    创建ConfigurationProperties 用来保存配置信息

    创建AutoConfiguration,引用定义好的配置信息

    在 AutoConfiguration 实现所有 starter 应该完成的操作,并且把这个类加入 spring.factories 配置文件中进行声明

    打包项在 SpringBoot 项目中引入该项目依赖,然后就可以使用该 starter 了

    具体操作步骤:

    在idea新建一个starter项目、直接执行下一步即可生成项目。

    在xml中加入如下配置文件:

    
    
        4.0.0
        http-starter
        0.0.1-SNAPSHOT
    
        
        
        
            org.springframework.boot
            spring-boot-starters
            1.5.2.RELEASE
        
    
        
            
            
                org.springframework.boot
                spring-boot-starter
            
            
            
                org.projectlombok
                lombok
                1.16.10
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    创建 proterties 类来保存配置信息

    @ConfigurationProperties(prefix = "http") 
    @Getter
    public class HttpProperties {
    
        // 如果配置文件中配置了http.url属性,则该默认属性会被覆盖
        private String url = "https://blog.csdn.net/weixin_39709134?type=blog";
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建业务类:

    @Setter
    @Getter
    public class HttpClient {
    
        private String url;
    
        // 根据url获取网页数据
        public String getHtml() {
            try {
                URL url = new URL(this.url);
                URLConnection urlConnection = url.openConnection();
                BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
                String line = null;
                StringBuilder sb = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    sb.append(line).append("
    ");
                }
                return sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "error";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    这个业务类包含了url属性和一个getHtml方法,用于获取一个网页HTML 数据

    创建 AutoConfiguration

    @Configuration
    @EnableConfigurationProperties(HttpProperties.class)
    public class HttpAutoConfiguration {
    
        @Resource
        private HttpProperties properties; // 使用配置
    
        // 在Spring上下文中创建一个对象
        @Bean
        @ConditionalOnMissingBean
        public HttpClient init() {
            HttpClient client = new HttpClient();
    
            String url = properties.getUrl();
            client.setUrl(url);
            return client;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在上面的 AutoConfiguration 中我们实现了自己要求:在 Spring 的上下文中创建了一个 HttpClient 类的 bean,并且我们把 properties 中的一个参数赋给了该 bean。

    最后,我们在resources文件夹下新建目录META-INF,在目录中新建spring.factories文件,并且在spring.factories中配置 AutoConfiguration:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    
    • 1

    com.nosuchfield.httpstarter.HttpAutoConfiguration

    最后使用 Maven 打包该项目。之后创建一个 SpringBoot 项目,在项目中添加我们之前打包的 starter 作为依赖,然后使用 SringBoot 来运行我们的 starter

    测试如下:

    @Component
    public class RunIt {
    
        @Resource
        private HttpClient httpClient;
    
        public void hello() {
            System.out.println(httpClient.getHtml());
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    之后可以在 application.properties中修改配置来进行测试证明 properties 中的数据确实被覆盖

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    【机器学习算法】聚类算法-3 K均值聚类法,PAM法,神经网络聚类法SOM
    【软考 系统架构设计师】计算机组成与体系结构⑦ 校验码
    JDK8中String的intern()方法详细解读【内存图解+多种例子+1.1w字长文】
    2022-Java 后端工程师面试指南 -(SSM)
    Spring Boot与Kubernetes结合:构建高可靠、高性能的微服务架构
    Redis原理篇——五种基本数据类型
    SpringBoot Event 观察者模式,实现业务解耦
    Java 面试题之框架
    第三章线性模型
    VUE前端问题
  • 原文地址:https://blog.csdn.net/m0_67392661/article/details/126080737