Spring Boot (一)Spring Boot 概述

Spring Boot(一)

一 、 Spring Boot 是什么?

  1. 首先Spring Boot不是一个框架,它是一种用来轻松创建具有最小或零配置的独立应用程序的方式。这是方法用来开发基于Spring的应用,但只需非常少的配置。它提供了默认的代码和注释配置,快速启动新的Spring项目而不需要太多时间。它利用现有的Spring项目以及第三方项目来开发生产就绪(投入生产)的应用程序。它提供了一组Starter Pom或gradle构建文件,可以使用它们添加所需的依赖项,并且还便于自动配置。
  2. Spring Boot根据其类路径上的库自动配置所需的类。假设应用程序想要与数据库交互,如果在类路径上有Spring数据库,那么它会自动建立与数据源类的连接。

二、 Spring Boot 主要目标

  1. 为所有Spring开发提供一个基本的 、 更快的 、 更广泛的入门体验 。
  2. 开箱即用 , 但随着需求开始偏离默认值 , 快速启动 。
  3. 提供大型项目(如嵌入式服务器 , 安全性 , 度量 , 运行状况检查 , 外部化配置)常见的一系列非功能特性 。
  4. 绝对没有代码生成 , 不需要xml配置 , 完全避免xml配置
  5. 为了避免定义更多的注释配置 (它将一些现有的Spring Fraework 注释组合合成一个简单的单一注释 。)
  6. 避免编写大量的import语句
  7. 提供一些默认值 ,以便在短时间内快速启动项目 。

三 、 新项目为什么需要Spring Boot

  1. 假设要在Spring Framework中开发一个Hello World应用程序,因为只有一个项目专用于开发Hello World功能:它就是控制器。其余的是任何使用Spring开发的Web应用程序的通用模板文件。但是如果所有Spring Web应用程序都需要它,为什么都要在每个项目中都必须提供它? 以下是新项目需要Spring Boot的理由了。
    1. 简化基于Java的应用程序开发,单元测试和集成测试过程。
    2. 通过提供一些默认值来减少开发,单元测试和集成测试时间。
    3. 提高生产力。
    4. 当使用默认值时,Spring Boot有自己的看法。如果不指定详细信息,它将使用其自己的默认配置。如果想要持久化,但是没有在POM文件中指定任何东西,那么Spring Boot会将Hibernate带有HSQLDB数据库的配置作为JPA提供者。
    5. 为大型项目(例如嵌入式服务器,安全性,度量,健康检查,外部化配置)提供许多非常常见的非功能特性/解决方案。

四 、 Spring Boot 核心和限制

  1. Spring Boot不是编写应用程序的框架,它可以帮助我们以最少的配置或零配置开发和构建,打包和部署应用程序。
  2. 它不是应用程序服务器。但是它是提供应用程序服务器功能的嵌入式servlet容器,而不是Spring Boot本身。
  3. 类似地,Spring Boot不实现任何企业Java规范,例如JPA或JMS。 例如,Spring Boot不实现JPA,但它通过为JPA实现(例如Hibernate)自动配置适当的bean来支持JPA。
  4. 最后,Spring Boot不使用任何形式的代码生成来完成它的功能。它是利用Spring 4的条件配置功能,以及Maven和Gradle提供的传递依赖关系解析,以在Spring应用程序上下文中自动配置bean。
  5. 简而言之,Spring Boot它的核心就是Spring。
  6. 未来的Spring项目不会有任何XML配置作为它的一部分,一切都将由项目Spring Boot处理。

五、 Spring Boot 的优点和缺点

  1. 优点:
    1. 使用Java或Groovy开发基于Spring的应用程序非常容易。
    2. 它减少了大量的开发时间并提高了生产力。
    3. 它避免了编写大量的样板代码,注释和XML配置。
    4. Spring Boot应用程序与其Spring生态系统(如Spring JDBC,Spring ORM,Spring Data,Spring Security等)集成非常容易。
    5. 它遵循“自用默认配置”方法,以减少开发工作量。
    6. 它提供嵌入式HTTP服务器,如Tomcat,Jetty等,以开发和测试Web应用程序非常容易。
    7. 它提供CLI(命令行界面)工具从命令提示符,非常容易和快速地开发和测试Spring Boot(Java或Groovy)应用程序。
    8. 它提供了许多插件来开发和测试Spring启动应用程序非常容易使用构建工具,如Maven和Gradle
    9. 它提供了许多插件,以便与嵌入式和内存数据库工作非常容易。
  2. 限制:
    1. 将现有或传统的Spring Framework项目转换为Spring Boot应用程序是一个非常困难和耗时的过程。它仅适用于全新Spring项目。

六、 Spring Boot 入门

  1. Spring Boot项目归根只是一个常规的Spring项目,只是利用了Spring Boot启动程序和自动配置。要创建Spring Boot应用程序的方法,Spring团队(The Pivotal Team)提供了以下三种方法。
    1. 使用Spring Boot CLI工具
    2. 使用Spring STS IDE
    3. 使用Spring Initializr (网站 http://start.spring.io/)
  2. 可以使用Spring Boot开发两种基于Spring的应用程序:
    1. 基于Java的应用程序
    2. 基于Groovy的应用程序
  3. 我们可以使用Spring Boot CLI或Spring STS IDE或Spring Initializr 网站来开发Spring Boot Groovy应用程序。 但是,我们可以使用Spring STS IDE或Spring Initializr网站来开发Spring Boot Java应用程序。
  4. 无论如何,Groovy也是JVM语言几乎类似于Java语言。可以将Groovy和Java组合成一个项目。因为就像Java文件一样,Groovy文件最终只能编译成 .class 文件。 .groovy 和 .java 文件都转换为 .class 文件(相同字节代码格式)。
  5. Spring Boot框架编程模型的灵感来自Groovy编程模型。 Spring Boot在内部使用一些基于Groovy的技术和工具来提供默认的导入和配置。
  6. Spring Boot框架还将现有的Spring Framework注释组合为一些简单或单个注释。 我们将在后面的帖子中逐个探索这些注释,并附带一些实时示例。
  7. Spring Boot框架将Spring-Java应用程序编程模型彻底改变为新的编程模型。到目前为止,Spring Boot只处于初始阶段,但未来肯定都使用Spring Boot。
  8. Spring Boot CLI

    1. 它是使用Spring Boot的最简单和最快速的方法。它是一个用于执行groovy脚本的命令行工具。可以按照以下步骤安装此工具:
      1. 这里下载此项目的二进制发行版。 Spring Boot CLI需要Java JDK V1.6或更高版本才能运行。 Groovy v2.1作为此分发包的一部分进行打包,因此不需要安装(任何现有的Groovy安装都将被忽略)
      2. 如果解压zip文件,就会发现spring.bat将检查所有的设置。此脚本可以在目录/bin下找到。
    2. 下载Spring Boot CLI Zip文件到本地文件系统,并将spring-boot-cli-1.4.3.RELEASE.zip文件解压缩到本地文件系统中,在本实例中我们解压到 D:\software\yiibai\spring-1.4.3.RELEASE 目录下。
    3. 右键“我的电脑”->”高级系统设置”->”高级”->”环境变量”->选择”PATH”并新建并加上面的路径D:\software\yiibai\spring-1.4.3.RELEASE\bin;。如下图所示 -
    4. 执行以下命令验证安装结果 -

      C:\Users\Administrator>spring --version
      Spring CLI v1.4.3.RELEASE
      
    5. 现在Spring Boot CLI安装过程已成功完成。在讨论Spring Boot “HelloWorld”示例之前,首先要确定从命令提示符运行Groovy脚本是否正确。
  9. Spring Boot “Spring”命令

    1. Spring Boot CLI提供了一个“spring”命令,用来从命令提示符运行Spring Boot Groovy脚本。Spring Boot 的“spring –help”命令有很多选项,可以将此命令用于不同的目的。其中有一个重要的选项是“run”选项。

      spring run

  10. Spring Boot 的 Hello World 实例

    1. 可以用Spring Boot开发两种基于Spring的应用程序
      1. Groovy应用程序
      2. Java应用程序
    2. Grovvy程序:

      1. 在本地文件系统中创建一个“HelloWorld”文件夹,放置groovy脚本,这里放在 D:\software\yiibai\spring-1.4.3.RELEASE 目录下。
      2. 使用以下内容开发Groovy脚本文件。

        @RestController
        class HelloWorld {
          @RequestMapping("/")
          String hello() {
            "Hello JournalDev World."
          }
        }
        
      3. 将此文件命名为HelloWorld.groovy,这里的“.groovy”扩展名是必须的。
      4. 现在Spring Boot Hello World示例已准备好使用Spring MVC Rest控制器。运行和测试这个例子来了解Spring Boot框架。在本地文件系统中的“HelloWorld”文件夹中打开命令提示符。执行以下命令 -

        spring run HelloWorld.groovy
        

      5. 当执行“spring run HelloWorld.groovy”时,它会启动嵌入的Tomcat服务器的默认端口号:8080。现在Spring Boot Hello World示例应用程序已启动并正在运行。下面打开浏览器来测试一下。打开浏览器并访问以下链接。访问此URL:http://localhost:8080/

七 、 Spring Boot 安装

  1. 在安装之前确保 机器中已经安装了JDK1.6 及以上版本
  2. 如果你是一个Java 新手 , 或者你只想体验Spring Boot , 你可以首先尝试Spring Boot CLI
  3. 可以使用与标准Java库的方式来使用Spring Boot。只需在类路径中包含适当的spring-boot-*.jar文件即可。 Spring Boot不需要任何特殊工具集成,因此可以使用任何IDE或文本编辑器; 并且Spring Boot应用程序没有什么特别之处,因此您可以像任何其他Java程序一样运行和调试。
  4. 虽然可以直接复制 Spring Boot.jar 但是还是建议使用一个依赖管理工具 maven
  5. 使用maven 安装 Spring Boot

    1. Spring Boot 与maven 3.2 版本及以上兼容 。
    2. Spring引导依赖项groupId使用org.springframework.boot。 通常Maven POM文件将继承自spring-boot-starter-parent项目,并将依赖性声明为一个或多个“Starters”。 Spring Boot还提供了一个可选的Maven插件来创建可执行jar。
    3. 一个典型的pom.xml 文件的内容:

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>com.example</groupId>
          <artifactId>myproject</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      
          <!-- Inherit defaults from Spring Boot -->
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.4.3.RELEASE</version>
          </parent>
      
          <!-- Add typical dependencies for a web application -->
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
          </dependencies>
      
          <!-- Package as an executable jar -->
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      
    4. spring-boot-starter-parent是使用Spring Boot的一个很好的方法,但它可能并不适合所有的时候。 有时可能需要从不同的父POM继承,或者可能只是不喜欢默认设置。

  6. 安装Spring Boot CLI
    1. Spring Boot CLI是一个命令行工具,如果想要使用Spring快速原型化,可以使用它。它允许运行Groovy脚本,它有一个类似Java的语法,没有那么多的样板代码。
    2. 不一定需要CLI来使用Spring Boot,但它绝对是让Spring应用程序实现的最快捷方式。
    3. 具体安装方式 参考上文 。

八 、 Spring Boot 应用程序开发入门

  1. 在Java中开发一个简单的“Hello World!” Web应用程序,突出一些Spring Boot的主要特性。在这里将使用Maven来构建这个项目,因为大多数IDE支持它。
  2. 开始之前,打开一个终端,检查是否安装了Java和Maven的有效版本。

    C:\Users\Administrator>java -version
    java version "1.8.0_65"
    Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
    
    C:\Users\Administrator>mvn -v
    Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
    Maven home: D:\worksp\yiibai.com\apache-maven-3.3.9
    Java version: 1.8.0_65, vendor: Oracle Corporation
    Java home: D:\Program Files\Java\jdk1.8.0_65\jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
    
  3. 此示例需要在其自己的文件夹中创建。后续说明假定您已创建了一个合适的文件夹,并且它是“当前目录”。
  4. 创建POM.XML文件 : 我们需要从创建一个Maven pom.xml文件开始。pom.xml是将用于构建项目的配置,在这个示例中,把它放在 D:\spring-boot\pom.xml 。打开您喜欢的文本编辑器并添加以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>myproject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.3.RELEASE</version>
        </parent>
    
        <!-- Additional lines to be added here... -->
    
    </project>
    
  5. 它给出了一个工作构建,可以通过运行mvn package(可以忽略“jar will be empty - no content was marked for inclusion!”现在警告)测试它。
  6. 添加类路径依赖项

    1. Spring Boot提供了一些“启动器”,使得容易添加 jar 到你的类路径。在我们的示例应用程序已经在POM的父部分中使用了spring-boot-starter-parent。spring-boot-starter-parent是一个特殊的启动器,提供了有用的 Maven 默认值。 它还提供了一个依赖关系管理部分,以便您可以省略“blessed”依赖关系的 version 标签。
    2. 其他“Starters”只是提供了在开发特定类型的应用程序时可能需要的依赖关系。由于我们正在开发一个web应用程序,将添加一个spring-boot-starter-web依赖关系。 可以通过 mvn dependency:tree 查看依赖树以解决jar包冲突问题
    3. 可以看到spring-boot-starter-parent本身不提供依赖关系。现在编辑 pom.xml 文件,并在parent部分的下面添加spring-boot-starter-web依赖关系:

      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
      </dependencies>
      
    4. 再次运行 mvn denpendency:tree 命令 , 将看到现在有许多的其他依赖项 , 包括Tomcat web服务器和Spring Boot 本身 。
  7. 编写代码

    1. 我们需要创建一个单一的Java文件。Maven将默认从src/main/java编译源代码,所以需要创建该文件夹结构,然后添加一个名为src/main/java/Example.java的文件,完整的文件路径是 D:/spring-boot/src/main/java/Example.java,代码如下所示:

      import org.springframework.boot.*;
      import org.springframework.boot.autoconfigure.*;
      import org.springframework.stereotype.*;
      import org.springframework.web.bind.annotation.*;
      
      @RestController
      @EnableAutoConfiguration
      public class Example {
      
          @RequestMapping("/")
          String home() {
              return "Hello World!"; // Copyright: w w w . y i I b A i.c O m 
          }
      
          public static void main(String[] args) throws Exception {
              SpringApplication.run(Example.class, args);
          }
      
      }
      
    2. 虽然这里没有太多的代码,但背后有很多事情正在发生。让我们看看代码的重要部分。
      1. @RestController 和 @RequestMapping注解
        1. Example类的第一个注解是@RestController。这称为构造型注释,它为阅读代码的人提供了提示,对于Spring,该类扮演了一个特定的角色。在这种情况下,这个类是一个web @Controller,因此Spring会在处理传入的Web请求时考虑它。
        2. @RequestMapping注解提供了“路由”信息。它告诉Spring任何带有路径“/”的HTTP请求应该映射到home方法。@RestController注解告诉Spring将生成的字符串直接返回给调用者。
        3. @RestController和@RequestMapping注解是Spring MVC注释(它们不是Spring Boot特有的)。
      2. @EnableAutoConfiguration注解
        1. 第二个类级别注解是@EnableAutoConfiguration。这个注解告诉Spring Boot“猜测”将如何配置Spring,它是基于添加的jar依赖。 由于spring-boot-starter-web添加了Tomcat和Spring MVC,因此自动配置将假设正在开发一个Web应用程序并相应地设置Spring。
      3. “main”方法
        1. 应用程序的最后一部分是主(main)方法。 这只是一个遵循Java约定的应用程序入口点的标准方法。main方法通过调用run来委托Spring Boot SpringApplication类。SpringApplication将引导应用程序,启动Spring,从而启动自动配置Tomcat Web服务器。需要传递Example.class作为run方法的参数来告诉SpringApplication,这是主要的Spring组件。args数组也被传递以暴露任何命令行参数。
  8. 运行代码

    1. 现在,我们的应用程序应该可以正常运行工作了。由于 POM 中使用了spring-boot-starter-parent,有一个有用的 run 目标,用它来启动应用程序。输入 mvn spring-boot:run 从根项目目录启动应用程序:

        .   ____          _            __ _ _
       /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
      ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
       \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
        '  |____| .__|_| |_|_| |_\__, | / / / /
       =========|_|==============|___/=/_/_/_/
      ::Spring Boot:: (v1.4.3.RELEASE)
      ....... . . .
      ....... . . . (log output here)
      ....... . . .
      ........ Started Example in 2.222 seconds (JVM running for 6.514)
      
    2. 如果打开Web浏览器访问 http://localhost:8080 , 应该会看到以下输出:
  9. 创建可执行jar

    1. 现在,我们来完成一个例子,创建一个完全自包含的可执行jar文件,可以在生产中运行。可执行jar(有时称为“fat jar”)是包含编译的类以及需要运行的所有jar依赖性的代码存档。

      可执行jar和Java
      Java不提供任何标准方法来加载嵌套的jar文件(即包含在jar中的jar文件)。如果想要分发一个自包含的应用程序,这可能是有问题的。
      为了解决这个问题,许多开发人员使用“uber” jar。 一个uber jar简单地将所有类,从所有jar到一个单一的归档。这种方法的问题是,很难看到实际上在应用程序中使用哪些库。如果在多个jar中使用相同的文件名(但是具有不同的内容),它也可能是有问题的。
      Spring Boot采用不同的方法,并允许直接嵌套JAR。
      要创建可执行的jar,需要将spring-boot-maven-plugin添加到pom.xml文件中。 在dependencies部分下面插入以下行:
      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
              </plugin>
          </plugins>
      </build>
      
    2. POM 中 spring-boot-starter-parent 包括配置以绑定 repackage 目标。如果不使用父POM,则需要自己声明此配置。有关详细信息,请参阅插件文档
    3. 在 target 目录中,应该看到一个myproject-0.0.1-SNAPSHOT.jar文件。文件大小应为10 Mb左右。如果想看里面内容,可以使用jar tvf:

      【Linux环境下】jar tvf target/myproject-0.0.1-SNAPSHOT.jar

    4. 应该在target目录中看到一个名为myproject-0.0.1-SNAPSHOT.jar.original的文件。这是Maven在Spring Boot重新打包之前创建的原始jar文件。
    5. 要运行该应用程序,请使用java -jar命令:

      java -jar target/myproject-0.0.1-SNAPSHOT.jar
      
        .   ____          _            __ _ _
       /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
      ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
       \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
        '  |____| .__|_| |_|_| |_\__, | / / / /
       =========|_|==============|___/=/_/_/_/
      ::Spring Boot:: (v1.4.3.RELEASE)
      ....... . . .
      ....... . . . (log output here)
      ....... . . .
      ........ Started Example in 2.536 seconds (JVM running for 2.864)
      

    6. 如果打开Web浏览器访问 http://localhost:8080 , 应该会看到以下输出:
    7. 第一个Spring Boot 引用程序开发完成 。

猜你喜欢

转载自blog.csdn.net/chou_out_man/article/details/80005735