第一章 Spring Boot 2.2.2入门知识

2020-01-07 · 谭朝红 ·

在本文中,主要内容包括什么是Spring Boot,优点,主要功能以及使用Spring Boot创建一个简单的应用程序。

Spring Boot是什么?

​ Spring Boot是对Spring Framework的增强和扩展,它极大的消除了使用Spring Framework时所需的大量样板代码的配置,与此同时,Spring Boot提供的很多Starter能让开发人员更快的完成系统的开发。

Spring Boot主要的优势

相比于Spring Framework,使用Spring Boot能为开发者带来以下优势:

  • 为使用Spring Framework带来更好的体验
  • 开箱即用,Spring Boot提供了大量的默认配置,根据需求,开发者可以很轻松覆盖原有配置
  • 提供了一些列优秀的功能插件,如嵌入式服务器,安全检查,系统指标,运行状况检查以及外部化配置
  • 推荐基于Java代码的配置方式,可以很少或完全不使用XML配置应用

Spring Boot的核心功能

与Spring Framework相比较,下面列举Spring Boot的一些核心功能,Spring Boot的功能不局限于下面所列举:

  1. Spring Boot Starters
  2. Spring Boot AutoConfiguration
  3. 优雅的配置管理
  4. Spring Boot Actuator
  5. 易于使用的嵌入式Servlet容器

接下来,将详细说明Spring Boot的核心功能。

1. Spring Boot Starters

​ Spring Boot提供了许多开箱即用的Starter模块,例如Spring MVC,JPA,MySQL,Spring Security,Solor,Hibernate,Freemarker等等。这些Starter已经预先配置好了最常用的依赖库,因此你不必像使用Spring那样去考虑各依赖库之间的版本兼容问题。

​ 如果你希望在项目中使用Hibernate框架且基于JPA实现,你只需要在pom文件中加入spring-boot-starter-data-jpa即可,Spring Boot会自动加载所需要的依赖库。

2. Spring Boot AutoConfiguration

​ Spring Boot另一个革命性的功能时自动配置,有了自动配置功能,你可以摒弃之前使用XML手动配置应用的方式,通过几行代码,即可完成应用系统复杂的配置工作。

​ Spring Boot会自动根据某些特定的条件自动完成Bean的注册工作,下面是触发Spring Boot完成自动注入的一些条件:

  • 当类路径下存在特定的且可用的类时
  • 当Spring Bean存在/不存在时
  • 当存在特定的系统属性时
  • 当缺少配置文件时

例如,当你的项目中存在spring-mvc的依赖库时,Spring Boot会猜测你将构建一个基于Spring MVC的Web应用程序,在你未编写任何代码前,Spring Boot会尝试注册一个默认的DispatcherServlet。如果你的类路径下包含得有任何嵌入式数据库驱动程序(H2或HSQL),在未显示配置DataSource前,Spring Boot会自动配置一个DataSource得Bean。

3. 优雅的配置管理

​ Spring Boot支持使用@PropertySource注解完成外部化可配置属性。使用Spring Boot的配置键值对,可以将键值对与Bean属性进行绑定,另外,Spring Boot还提供为不同环境提供针对性的配置文件,你只需要简单的几行代码即可完成配置管理。

4. Spring Boot Actuator

​ 很多时候,我们都需要去收集在生产环境中运行的应用程序的诸多性能参数,而Spring Boot Actuator已经为我们提供了类似的许多功能,我们无需编写大量的代码,只需简单的一些配置,便可监控我们的应用程序,收集指标数据,了解URL请求状况等。例如,我们可以通过引入Spring Boot Actuator而获得如下的一些便利:

  • 获取应用程序中所有Spring Bean的详细信息
  • 获取应用程序运行状况信息
  • 获取HTTP跟踪信息
  • 获取应用程序日志信息
  • 获取应用程序中的计划任务信息
  • 获取应用程序中的路径映射列表信息(Web应用)

5. 易于使用的嵌入式Servlet容器

​ 以往,我们在构建Web应用程序时,需要手动创建WAR类型的程序包,然后将其部署到外部服务器(例如Tomcat)上才可以运行应用程序,现在,当你使用Spring Boot时,你可以很方便的创建JAR类型的程序包,且该类型的程序包已经内嵌了Servlet容器,你可以在不依赖于外部服务器的情况下运行Web应用程序。

6. 系统要求

​ Spring Boot 2.2.2.RELEASE最低要求Java 8,同时也支持Java 13。此外,还需要Spring Framework 5.2.2.RELEASE或更高的版本。

6.1 构建工具本版

在开始使用Spring Boot 2.2.2之前,你应该先检查本地的构建工具是否满足以下的配置要求:

构建工具 版本
Maven 3.3+
Gradle 5.x/6.x

6.2 Servlet容器

Spring Boot 2.2.2支持以下的嵌入式Servlet容器:

容器 Servlet版本
Tomcat 9.0 4.0
Jetty 9.4 3.1
Undertow 2.0 4.0

除此之外,你还可以将Spring Boot应用程序打包为WAR包,部署到支持Servlet 3.1及以上版本的外部容器中。

7. 为什么使用Spring Boot?

与直接使用Spring相比,使用Spring Boot你将如下的一些优势(不局限于列举范围):

  1. 开发基于Spring的应用变得更简单容易
  2. 开箱即用的特性减少的开发时间,提高了开发效率
  3. Spring Boot避免了大量的样板代码和XML配置
  4. 能够很轻松的与其他Spring生态系统集成(例如Spring JDBC,Spring ORM,Spring Data,Spring Security)
  5. Spring Boot的自动注入能够帮助开发人员减少工作量
  6. Spring Boot提供了嵌入式的Servlet容器,方便开发人员对应用进行测试

8.编写第一个Spring Boot应用程序

​ 本小节将基于Java 8 和Maven 3.0+构建一个简单的Spring Boot Web应用程序,通过浏览器访问http://localhost:8080 ,在页面中输出”Hello Spring Boot“语句。

​ 在开始编写应用程序之前,先检查本地环境是否满足开发要求。首先,打开操作系统终端,检查Java的版本信息,以Microsoft Windows 10 为例:

检查JDK版本信息

然后,在终端输入mvn -v检查Maven的版本信息

检查MAVEN版本信息

8.1 创建POM

首先,我们需要创建一个工程目录spring-boot-firstapp,然后在其目录下创建一个Maven 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ramostear</groupId>
    <artifactId>spring-boot-firstapp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-firstapp</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

最后,打开你的操作系统终端,导航到spring-boot-firstapp目录下,执行mvn package命令进行测试,执行此命令后,spring-boot-firstapp目录下会生成多个文件夹:

spring-boot-firstapp
├─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─ramostear
    │  │          └─springbootfirstapp
    │  │                  SpringBootFirstappApplication.java
    │  │                  
    │  └─resources
    │          application.properties
    │          
    └─test
    └─java
    └─com
    └─ramostear
    └─springbootfirstapp
      └─SpringBootFirstappApplicationTests.java

8.2 添加Web依赖

由于我们要创建一个Web应用程序,因此需要向pom文件中加入相关的web依赖。现在我们使用spring boot构建web应用程序,只需在pom文件的dependencies节点中加入如下的依赖即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

在这里,你会发现我们并没有填写spring-boot-starter-web依赖库的版本号,该依赖库的版本将由spring-boot-starter-parent统一管理。

8.3 编写代码

现在,我们要创建一个Java文件,完成向浏览器页面输入”Hello Spring Boot“的功能。在src/main/java/com/ramostear/springbootfirstapp目录下创建一个名为HelloSpringBoot.java的文件,并用你喜欢的文本编辑器打开文件并写入以下代码:

package com.ramostear.springbootfirstapp;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName HelloSpringBoot
 * @Description TODO
 * @Author ramostear
 * @Date 2020/1/7 0007 15:19
 * @Version 1.0
 **/
@RestController
public class HelloSpringBoot {

    @GetMapping("/")
    public String sayHello(){
        return "Hello Spring Boot";
    }
}

RestController注解会将字符串”Hello Spring Boot“直接返回到页面,而不是返回一个视图;GetMapping时RequestMapping的一种简写。

8.4 运行示例

​ 由于使用了spring-boot-starter-parent依赖,因此可以在终端使用mvn spring-boot:run命令来运行本次示例,命令执行成功后,你可以在控制台查看到以下的输出:

mvn spring-boot:run
.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)

...

2020-01-07 15:26:04.868  INFO 3100 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
...

现在,你可以打开浏览器并输入http://localhost:8080,你可以在页面上观察到如下的信息:

第一个Spring Boot应用程序

第一章 Spring Boot 2.2.2入门知识

在本文中,主要内容包括什么是Spring Boot,优点,主要功能以及使用Spring Boot创建一个简单的应用程序