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

打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

目次
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中参加如下配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <artifactId>http-starter</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <!-- 自定义starter都应该继承自该依赖 -->
  9.     <!-- 如果自定义starter本身需要继承其它的依赖,可以参考 https://stackoverflow.com/a/21318359 解决 -->
  10.     <parent>
  11.         <groupId>org.springframework.boot</groupId>
  12.         <artifactId>spring-boot-starters</artifactId>
  13.         <version>1.5.2.RELEASE</version>
  14.     </parent>
  15.     <dependencies>
  16.         <!-- 自定义starter依赖此jar包 -->
  17.         <dependency>
  18.             <groupId>org.springframework.boot</groupId>
  19.             <artifactId>spring-boot-starter</artifactId>
  20.         </dependency>
  21.         <!-- lombok用于自动生成get、set方法 -->
  22.         <dependency>
  23.             <groupId>org.projectlombok</groupId>
  24.             <artifactId>lombok</artifactId>
  25.             <version>1.16.10</version>
  26.         </dependency>
  27.     </dependencies>
  28. </project>
复制代码
创建 proterties 类来保存配置信息

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

  1. @Setter
  2. @Getter
  3. public class HttpClient {
  4.     private String url;
  5.     // 根据url获取网页数据
  6.     public String getHtml() {
  7.         try {
  8.             URL url = new URL(this.url);
  9.             URLConnection urlConnection = url.openConnection();
  10.             BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
  11.             String line = null;
  12.             StringBuilder sb = new StringBuilder();
  13.             while ((line = br.readLine()) != null) {
  14.                 sb.append(line).append("
  15. ");
  16.             }
  17.             return sb.toString();
  18.         } catch (Exception e) {
  19.             e.printStackTrace();
  20.         }
  21.         return "error";
  22.     }
  23. }
复制代码
这个业务类包罗了url属性和一个getHtml方法,用于获取一个网页HTML 数据
创建 AutoConfiguration

  1. @Configuration
  2. @EnableConfigurationProperties(HttpProperties.class)
  3. public class HttpAutoConfiguration {
  4.     @Resource
  5.     private HttpProperties properties; // 使用配置
  6.     // 在Spring上下文中创建一个对象
  7.     @Bean
  8.     @ConditionalOnMissingBean
  9.     public HttpClient init() {
  10.         HttpClient client = new HttpClient();
  11.         String url = properties.getUrl();
  12.         client.setUrl(url);
  13.         return client;
  14.     }
  15. }
复制代码
在上面的 AutoConfiguration 中我们实现了本身要求:在 Spring 的上下文中创建了一个 HttpClient 类的 bean,而且我们把 properties 中的一个参数赋给了该 bean。
末了,我们在resources文件夹下新建目次META-INF,在目次中新建spring.factories文件,而且在spring.factories中配置 AutoConfiguration:
  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=
复制代码
com.nosuchfield.httpstarter.HttpAutoConfiguration
末了使用 Maven 打包该项目。之后创建一个 SpringBoot 项目,在项目中添加我们之前打包的 starter 作为依赖,然后使用 SringBoot 来运行我们的 starter
测试如下:

  1. @Component
  2. public class RunIt {
  3.     @Resource
  4.     private HttpClient httpClient;
  5.     public void hello() {
  6.         System.out.println(httpClient.getHtml());
  7.     }
  8. }
复制代码

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表