0x01 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 有疑惑,我们很乐意帮助你

  1. How-to documents 这一章节讲解大多数常见的问题
  2. 学习Spring 基础知识,Spring Boot 构建在许多Spring的项目之上。如果你刚开始学Spring ,那么尝试根据这个指南学习 https://spring.io/guides
  3. 使用Spring Boot 标签,在 https://stackoverflow.com/ 提问题
  4. 在 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或更高版本。

编译工具版本
Maven3.3+
Gradle4.4+

Spring boot 支持下面内嵌的Servlet 容器

名字Servlet 版本
Tomcat 9.04.0
Jetty 9.43.1
Undertow 2.04.0

你也可以部署在任何兼容 Servlet 3.1+ 的Servlet 容器中。

3.3 安装 Spring Boot

Spring Boot 可以像经典的Java 应用程序一样通过Java -jar *.jar 的方式执行

3.3.1 安装JDK 或者JRE

以下任选其一即可:

配置环境变量:

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 作为groupId
spring-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
然后根据如下步骤快速创建项目:

  1. 快速构建我们的应用程序可以使用这个网址 https://start.spring.io/
  2. 选择Web 模块
  3. 点击下载
    在这里插入图片描述

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 模块已经添加了内嵌的TomcatSpring 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/
在这里插入图片描述
本节完~

文档内容 一、 Spring介绍 1 1.1、SpringBoot简介 1 1.2、系统要求: 1 1.3、SpringBootSpringMVC区别 1 1.4、SpringBootSpringCloud区别 2 1.5常见错误 2 二、快速入门 2 2.1、创建一个Maven工程 2 2.2、pom文件引入依赖 3 2.3、编写HelloWorld服务 3 2.4、@RestController 4 2.5、@EnableAutoConfiguration 4 2.6 SpringApplication.run(HelloController.class, args); 4 2.7、SpringBoot启动方式1 4 2.8、SpringBoot启动方式2 4 2.9、SpringBoot启动方式3 5 三、 Web开发 5 3.1、静态资源访问 5 3.2、渲染Web页面 5 3.3、使用Freemarker模板引擎渲染web视图 6 3.3.1、pom文件引入: 6 3.3.2、后台代码 6 3.3.3、前台代码 6 3.3.4、Freemarker其他用法 7 3.3.5、Freemarker配置 8 3.4、使用JSP渲染Web视图 8 3.4.1、pom文件引入以下依赖 8 3.4.2、在application.properties创建以下配置 9 3.4.3、后台代码 9 3.5、全局捕获异常 10 四、 数据访问 10 4.1、springboot整合使用JdbcTemplate 10 4.2、springboot整合使用mybatis 12 4.3、springboot整合使用springjpa 18 4.4、springboot整合多数据源 19 五、 事物管理 25 5.1.1SpringBoot整合事物管理 25 5.1.2SpringBoot分布式事物管理 25 六、 日志管理 30 6.1使用log4j记录日志 30 6.2使用AOP统一处理Web请求日志 32 6.3Spring Boot集成lombok让代码更简洁 33 七、 缓存支持 35 7.1注解配置与EhCache使用 35 7.2使用Redis集成缓存 37 八、 热部署 37 8.1 什么是热部署 37 8.2 项目演示案例 37 8.3 热部署原理 37 8.4 Devtools依赖 38 8.5 Devtools原理 38 九、 监控管理 38 Actuator监控应用 38 Maven依赖 38 YML配置 39 Actuator访问路径 40 Admin-UI分布式微服务监控中心 40 Admin-UI-Server 40 Admin-UI-Client 41 十、 性能优化 43 组件自动扫描带来的问题 43 将Servlet容器变成Undertow 44 SpringBoot JVM参数调优 44 十一、 2.0版本新特性 45 以Java 8 为基准 45 内嵌容器包结构调整 45 Servlet-specific 的server properties调整 45 Actuator 默认映射 46 Spring Loaded不再支持 46 支持Quartz Scheduler 46 OAuth 2.0 支持 46 支持Spring WebFlux 46 版本要求 46 十二、 其他内容 47 12.1、使用@Scheduled创建定时任务 47 12.2、使用@Async实现异步调用 47 12.3、自定义参数 49 12.4、多环境配置 50 12.5、修改端口号 50 12.6、SpringBoot yml 使用 50 12.7、SpringBoot整合拦截器 51 12.8、发布打包 52
springboot学习资料 一、 Spring介绍 1 1.1、SpringBoot简介 1 1.2、系统要求: 1 二、快速入门 1 2.1、创建一个Maven工程 1 2.2、pom文件引入依赖 2 2.3、编写HelloWorld服务 2 2.4、@RestController 3 2.5、@EnableAutoConfiguration 3 2.6 SpringApplication.run(HelloController.class, args); 3 @SpringbootApplication 3 2.7、SpringBoot启动方式1 4 2.8、SpringBoot启动方式2 4 三、 Web开发 5 3.1、静态资源访问 5 3.2、全局捕获异常 5 3.3、渲染Web页面 6 3.4、使用Freemarker模板引擎渲染web视图 6 3.4.1、pom文件引入: 6 3.4.2、后台代码 6 3.4.3、前台代码 7 3.4.4、Freemarker其他用法 7 3.4.5、Freemarker配置 8 3.5、使用JSP渲染Web视图 8 3.5.1、pom文件引入以下依赖 8 3.5.2、在application.properties创建以下配置 9 3.5.3、后台代码 9 四、 数据访问 9 4.1、springboot整合使用JdbcTemplate 9 4.2、springboot整合使用mybatis 9 4.3、springboot整合使用springjpa 9 4.4、springboot整合多数据源 9 五、 事物管理 9 5.1.1springboot整合事物管理 9 5.1.2SpringBoot分布式事物管理 9 六、 日志管理 9 6.1使用log4j记录日志 9 6.2使用AOP统一处理Web请求日志 9 七、 缓存支持 9 7.1注解配置与EhCache使用 9 使用Redis做集中式缓存 9 八、 其他内容 9 8.1、使用@Scheduled创建定时任务 9 8.2、使用@Async实现异步调用 9 8.3、自定义参数 9 8.4、多环境配置 9 8.5、修改端口号 9 8.6、SpringBoot yml 使用 9 8.7、发布打包 9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值