0. Spring Boot 2.x 入门学习指南
I. Spring Boot 文档
当前版本:2.1.2.RELEASE
如果你刚开始学习Spring Boot 或者Spring,那么应该从这篇博文开始阅读。
它会回答你 是什么?怎么做?为什么?这些基础性问题。它包含了Spring Boot的介绍,安装说明,然后会带你开始自己亲手创建一个Spring Boot 应用程序,顺便讲解一些用法规则。
1. 关于这个文档
Spring Boot 参考文档有三种格式:
• HTML
• PDF
• EPUB
这三个文档的更新地址:https://docs.spring.io/spring-boot/docs/current/reference/
HTML 格式是在线英文文档,PDF 文件格式,EPUB电子书阅读格式。
2. 获取帮助
如果对Spring Boot 有疑惑,我们很乐意帮助你
- How-to documents 这一章节讲解大多数常见的问题
- 学习Spring 基础知识,Spring Boot 构建在许多Spring的项目之上。如果你刚开始学Spring ,那么尝试根据这个指南学习 https://spring.io/guides
- 使用Spring Boot 标签,在 https://stackoverflow.com/ 提问题
- 在 GitHub 上提Bug https://github.com/spring-projects/spring-boot/issues
Spring Boot 的一切都是开源的包括这个文档。
3. 入门
如果你刚开始学习Spring Boot 或者 Spring ,那么跟我一起来学习吧
3.1 Spring Boot 介绍
Spring Boot可以轻松创建可以独立运行,生产级基于Spring的应用程序。 大多数Spring
Boot应用程序只需要很少的Spring配置。 我们可以使用Spring Boot创建能用java -jar 命令运行的Java 应用程序,
也能创建传统的war包部署启动的Java应用程序 官方提供了一套 spring scripts(Spring 脚本),后面我们会详解。
Spring Boot 目标:
- 让所有的Spring 开发变得更快,使用更广泛
- 开箱即用,即提供了很多常用的默认配置。
- 提供非常强大的功能支持,比如嵌入式Web容器,安全性,运行状态检测等。
- 争取尽可能不需要或者少地使用 XML 和代码配置
3.2 系统要求
Spring Boot 2.1.2.RELEASE需要Java 8,并且与Java 11兼容。
还需要Spring Framework 5.1.4.RELEASE或更高版本。
编译工具 | 版本 |
---|---|
Maven | 3.3+ |
Gradle | 4.4+ |
Spring boot 支持下面内嵌的Servlet 容器
名字 | Servlet 版本 |
---|---|
Tomcat 9.0 | 4.0 |
Jetty 9.4 | 3.1 |
Undertow 2.0 | 4.0 |
你也可以部署在任何兼容 Servlet 3.1+ 的Servlet 容器中。
3.3 安装 Spring Boot
Spring Boot 可以像经典的Java 应用程序一样通过Java -jar *.jar 的方式执行
3.3.1 安装JDK 或者JRE
以下任选其一即可:
- JDK 1.8 : Oracle 官网版本
- Java SDK V 1.8 https://www.java.com/en/
- Open JDK 1.8: http://jdk.java.net/8/
- 其他下载地址:https://java.com/zh_CN/
配置环境变量:
JAVA_HOME
C:\Users\fairy\apps\jdk\jdk1.8
新建CLASSPATH环境变量:
CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar;
PATH 中追加
%JAVA_HOME%\bin\
安装完成后验证安装输入命令:
java -version
安装成功回显如下:
注意:
不知道是不是如今的win10版本升级问题,javac命令回显和之前不一样了。
但是不影响正常使用,只需要用java -version验证即可
3.3.2 Maven安装
Spring Boot 兼容Maven 3.3 以上版本,如果没有安装,可以去官网进行安装配置 https://maven.apache.org/
一些其他操作系统比如Mac OS 系统可能需要包管理器安装:
brew install maven
Ubuntu 使用命令sudo apt-get install maven
关于Maven的详细安装配置介绍,参考我的阿里云博文:
版本依赖管理之 Maven 修炼手册
验证Maven安装
mvn -v
安装成功如下所示:
Spring Boot 依赖使用
org.springframework.boot
作为groupIdspring-boot-starter-parent
作为artifactId Spring Boot
也提供了很多可选的插件来创建可执行的Jar
一个经典的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>2.1.2.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>
spring-boot-starter-parent
是使用Spring Boot的一个很好的方式,但是可能不适用所有场景。如果不喜欢这个默认的设置也可以参考后面的文章,使用13.2.2 Spring Boot 没有Parent POM
3.3.3 Gradle 安装
Spring Boot 兼容Gradle 4.4 +,如果没有安装可以去Gradle官网下载
这种方式目前还不太常用,所以不做太多详解。
3.3.4 安装Spring Boot CLI
Spring Boot CLI (Command Line Interface) 是一个命令行工具,使用的是Groovy脚本,这个也不是必要的,但它绝对是启动Spring应用程序最快的方法。
手动安装
spring-boot-cli-2.1.2.RELEASE-bin.zip
spring-boot-cli-2.1.2.RELEASE-bin.tar.gz
Spring Boot CLI 需要Java JDK v1.8
配置下环境变量
新建环境变量
SPRING_HOME
安装目录
追加到Path变量
%SPRING_HOME%\bin
验证安装:
spring --version
Spring CLI 案例使用
我们需要创建一个app.groovy
然后Controller 配置如下
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
运行命令
spring run app.groovy
打开http://localhost:8080 网址可以看到输出
Hello World!
Spring Boot 升级到2.x 说明
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide
https://github.com/spring-projects/spring-boot/wiki
当升级到新版本,以前的一些属性值可能已经被重命名或者被移除掉了。
关于这个问题,Spring Boot 提供了一个启动时分析应用程序环境和打印日志的方法,还可以在运行时临时迁移属性。
要想启用这个功能,添加这个依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
添加到环境后期的属性(例如使用时 @PropertySource)将不会被考虑在内。
完成迁移后,请确保从项目的依赖项中删除此模块
要升级现有CLI安装,使用包管理器命令brew upgrade
或者参考安装说明文档
3.4 开发我们的第一个Spring Boot 应用
接下来讲述如何开发一个简单的拥有Spring 核心功能的 “Hello World” Web应用程序.
我们使用Maven来构建这个项目,因为大多数IDE都支持它。
如果你要解决一个特殊的问题,可以参考这个文档 https://spring.io/guides
然后根据如下步骤快速创建项目:
- 快速构建我们的应用程序可以使用这个网址 https://start.spring.io/
- 选择Web 模块
- 点击下载
![]()
3.4.1 环境安装检查
在开始之前我们需要打开命令行检查下安装的环境是否准备好
验证JDK(JRE)是否安装成功
java -version
验证Maven 是否安装成功
输入如下命令
mvn -v
安装成功如下显示:
3.4.2 创建POM.xml
我们首先创建一个文件夹,比如叫做sample
然后在这个文件夹下创建一个pom.xml文件
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>2.1.2.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
我们可以命令行进入这个文件夹,然后输入命令如下:
mvn package
执行成功如下所示:
3.4.3 添加ClassPath 依赖
Spring Boot 提供了很多“Starters”(启动器)来将批量的Jar包添加到你的ClassPath 中,我们刚才的pom.xml中已经使用了spring-boot-starter-parent
这个spring-boot-starter-parent
提供了很多有用的Maven默认配置,比如
Dependency Management节点,这个用来统一项目中依赖版本,
version 标签来统一版本号
将Jar 包依赖添加到项目的Classpath中,在命令行下输入如下命令:
mvn dependency:tree
执行结果如下:
刚才使用命令后我们可以清楚地看到依赖中并没有web模块,但是由于我们要开发的是一个web应用,因此我们需要重新编辑我们的pom.xml 文件,添加如下依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
完整的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>2.1.2.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
3.4.4 写代码
要完成我们的应用程序,我们还需要新建一个java文件
创建src/main/src 文件夹和一个Example.java 文件
如下所示:
Example.java如下所示:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Example.class, args);
}
}
代码不是很多,接下来我们来讲解下这些代码。
3.4.4.1 @RestController 和@RequestMapping 注解
Exam的上方第一个注解@RestController
,
它为阅读代码的人提供了提示,表示我们的类是一个Web @Controller
,所以Spring在处理传入的Web请求时会考虑它。
@RequestMapping
注解提供了路由信息,它告诉Spring 任何/
HTTP 请求都映射到home
方法
该 @RestController
注解告诉Spring使得到的字符串直接返回给调用者。
值得注意的是,@RestController 和@RequestMapping 注解都是Spring MVC 的注解,而不是Spring Boot 所特有的。
3.4.4.2 @EnableAutoConfiguration 注解
第二个类级别的注解是@EnableAutoConfiguration
,这个注解告诉Spring 你想要如何配置Spring.
由于spring-boot-starter-web
模块已经添加了内嵌的Tomcat
和Spring MVC
这个自动配置会默认认为你想开发一个基于Spring的Web 应用程序,并采用Spring的一写默认配置。
3.4.4.3 main 方法
最后一部分是我们的main 方法,这是一个标准的主方法,我们的main方法SpringApplication通过调用代理给Spring Boot的类run方法。 SpringApplication引导我们的应用程序,启动Spring,然后启动自动配置的Tomcat Web服务器。我们需要Example.class作为参数传递给run方法,以告诉SpringApplication哪个是主要的Spring组件。该 args数组也被传递以公开任何命令行参数。
SpringApplication.run(Example.class, args);
3.5 运行这个案例
pom.xml 根目录下打开命令行执行如下命令
mvn spring-boot:run
运行成功如下:
如果想退出程序,按快捷键 Ctrl+C
打开浏览器:http://localhost:8080/
3.6 创建一个可执行的Jar
可执行的jar和Java
Java没有提供加载嵌套jar文件的标准方法(jar文件本身包含在jar中)为了解决这个问题,许多开发人员使用“uber” jar。uber
jar将所有应用程序依赖项中的所有类打包到一个存档中。这种方法的问题在于很难看出您的应用程序中有哪些库。如果在多个jar中使用相同的文件名(但具有不同的内容),也可能会有问题。Spring Boot采用不同的方法,让您直接嵌套jar。
要创建一个可执行的Jar, Spring 使用一种spring-boot-maven-plugin来实现它
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
关于这个插件更多用法,参考 插件文档
完善后最终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>2.1.2.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
好了,现在我们就可以使用maven打包命令将我们的项目打包生成可执行jar
mvn package
我们查看target目录,应该能看到myproject-0.0.1-SNAPSHOT.jar。
该文件大小应为10 MB左右
这里谈谈我的理解关于两个文件
- myproject-0.0.1-SNAPSHOT.jar
- myproject-0.0.1-SNAPSHOT.jar.original
这两个文件,其实最先生成的是myproject-0.0.1-SNAPSHOT.jar.original,这个文件中还没有添加一些项目依赖,只能看到
Example.class, pom.xml ,pom.properties
有兴趣的话可以自己用压缩软件打开看看
myproject-0.0.1-SNAPSHOT.jar是经过Spring 这个插件处理的,添加了相关依赖的可执行jar
我们只需要复制这个jar 到服务器上,然后在安装JRE的环境下,输入以下命令启动即可
java -jar .\myproject-0.0.1-SNAPSHOT.jar
打开浏览器,输入地址:http://localhost:8080/
本节完~