likes
comments
collection
share

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

作者站长头像
站长
· 阅读数 10

前言

在上一篇文章中,壹哥 给大家介绍了SpringBoot诞生之前的世界,那时候的世界由Spring主导,负责提供一个供万物生长的土壤,并负责创建万物。但是Spring的世界里,各种生命的创造都很麻烦,需要经历各种流程,大家在这片土地上工作的特别疲累。所以大家都期待着能够出现一个可以让这个世界变得轻松的整合者,所以SpringBoot就来了,为简化而生,向幸福迈进!

接下来,壹哥 就带各位正式认识SpringBoot,看看SpringBoot到底是什么,有什么作用,我们该怎么用他!

一. 概述

当这个世界上大家都在推着独轮车运货的时候,主要就是看谁人多力气大,谁就能多运点东西。但是当汽车产生以后,人再多也干不过喝汽油的大卡车!而SpringBoot的诞生,就无异于把开发这个世界从独轮车时代带入了汽车时代!所以,一切都变了,变得简单了,轻松几下,我们就能做很多!

1. Spring Boot的诞生背景

我们知道,现在一些动态语言慢慢的开始流行(Ruby、Groovy、Scala、Node.js)起来了,这时候就越发的显得传统的Spring开发方式看起来显得格外的笨重,显得Spring的开发缺点很多,比如:

①. 配置繁多而杂乱; ②. 开发效率低下而重复; ③. 项目部署复杂而困难; ④. 集成第三方库难度大......

在这样一个时代背景下,Spring 团队在现有Spring框架的基础上发布了一个新的开发框架---Spring Boot。该框架是由Spring Pivotal 团队提供的全新框架,其设计目的主要是用来简化Java Web项目的初始搭建,配置以及开发过程,为我们的开发带来极大遍历!

2. SpringBoot简介

那么SpringBoot到底是什么呢?我们来看看官网对SpringBoot的介绍吧,如下图所示:

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

从上面的介绍中可知,Spring Boot可以帮助我们轻松地创建出一个基于Spring,且能够直接运行的独立的生产级应用程序。

而且利用SpringBoot可以很容易的整合Spring和其他第三方库,更重要的是SpringBoot采用了“约定大于配置”的思想理念,大量的减少了配置文件的使用,可以让我们的项目快速的开发部署运行起来。

并且SpringBoot自身就内嵌了Tomcat,Jetty,Undertow等Web服务器,可以让我们灵活的选择到底该生成什么类型的应用程序,常见项目类型如下:

①. jar包程序; ②. war包程序;

另外SpringBoot中还提供了一个可以运行项目的“spring script”的命令行工具,方便我们快速方便的启动项目。

3. Spring Boot要点分析

接下来 壹哥 带各位来看看SpringBoot的主要特点,了解一下SpringBoot到底有哪些特性,看看这些新特性能不能激发出我们学习SpringBoot的欲望吧。

3.1 特点

我们先看一张SpringBoot官网关于其特点的截图,如下:

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

这些特点我给大家翻译总结如下:

  • SpringBoot可以创建独立的Spring应用程序;
  • SpringBoot中直接内嵌了Tomcat、Jetty或Undertow(无需部署WAR文件)等web服务器;
  • SpringBoot提供了“初始”的POM文件内容,以简化Maven配置;
  • SpringBoot可以尽可能自动地配置Spring;
  • SpringBoot可以提供生产就绪的功能,如指标,健康检查和外部化配置等功能;
  • SpringBoot可以绝对无代码生成,也不需要XML配置。

3.2 优点

根据上述特点,我们就可以提取出SpringBoot的主要优点了,如下图所示:

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

  • 快速构建项目,缩短开发时间
  • 对主流开发框架的无配置集成;
  • 易于理解和开发Spring应用;
  • 项目可独立运行,无需依赖外部的 Servlet 容器;
  • 提供运行时的应用监控;
  • 极大地提高了开发、部署效率;
  • 与云计算的天然集成。

3.3 缺点

当然,任何一个技术都不可能是十全十美的,SpringBoot也不例外,他虽然是个王者,但也有缺点:

  • 版本迭代速度很快,一些模块改动很大;
  • 由于不用自己做配置,报错时很难定位;
  • 网上现成的解决方案比较少。

我们学习一个技术,肯定要综合考虑,只要这个技术能够做到瑕不掩瑜,那就可以考虑使用。更何况SpringBoot的有点明显大于缺点,所以我们就这么愉快地决定啦,SpringBoot,学起来!

4. 关于”约定大于配置“(重点)

在上面 壹哥 给大家提到了一个思想,即”约定大于配置“,那什么是约定大于配置呢?我们先来看看比较正式的定义:

*约定大于配置(Convention Over Configuration),也称作按约定编程,这是一种软件设计范式。目的在于减少软件开发人员所需要做出的决定数量,从而获得简单灵活的好处,开发人员仅仅需要规定应用中不符合约定的部分。 *约定大于配置也被称为习惯优于配置、约定优于配置等。

能不能说人话,上面的根本看不懂啊!那,好吧,壹哥 再通俗的解释一下咯。

其实所谓的约定大于配置,就是指我们在开发中,有些xml或yml文件中的配置项,如果你没有配置的话,程序就会采用一个默认值。换句话说,只要程序能采用默认值的配置,就不需要我们再手动配置了,而这个默认值就是约定! 就比如:

  • /src/main/java目录用来存放java源文件;
  • src/main/resources目录用来存放资源文件,如application.yml文件,mybatis的*mapper.xml文件;
  • /src/test/java目录用来存放java测试文件;
  • /src/test/resources目录用来存放测试资源文件;
  • /target目录为项目的输出位置。

你可能会问,为啥非得在A目录中存放A文件,而不是存放B文件?我非得在/src/main/java中存放测试类不行吗?

你非要这么干,不是说不能实现这个功能,而是这样就打破了大家约定俗成的一种规则,也就是我们上面说的”约定“!就好比在国内,大家走路都走右边,你非得特立独行走左边,行不行呢?当然也不是说不行对吧,你走马路左边也能从北京走到上海,但是你在别人眼里就是个另类,出了事就是你的责任,因为你没有遵守大家都在遵循的一种”约定“!

对于我们人来说,能够满足大多数人的习惯的约定就是一种好的约定,而在程序中,能够简化代码的实现,使代码高可用的约定就是一种好的约定,所以一个好的约定可以减少很多配置。

SpringBoot中"约定大于配置"的思想,其实就是SpringBoot为我们的开发提供了一套已经配置好的默认值。这样就不需要再像以前那样去手动地编写xml配置文件了,只有默认配置项不能满足我们的需求时,才需要去修改配置,也就是说采用默认的"约定"就足够了,这就是所说的"约定"大于(优先于)我们自己的配置。

二. 环境配置

介绍了这么多SpringBoot的理论知识,接下来我们还是动起手来实操一把,毕竟SpringBoot主要还是实战为主,理论并没有那么多。

在进行开发之前,我们先看看SpringBoot开发之前对我们的开发环境有哪些要求吧。

1. 基本说明

本系列教程采用Spring Boot 2.x.x.RELEASE版本; 采用Java 8版本; 要求使用Spring Framework5.0.4.RELEASE或更高版本; 打包工具是Maven 3.2+ 或 Gradle 4+。

另外Spring Boot本身也内嵌了一些Servlet容器,如下图所示: SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

以上这些是基本说明,大家注意即可。

2. 安装配置JDK 8.0+

我们可以先查看一下自己的JDK版本,是不是JDK 8以上版本,太低的版本不行哦。

#检查java环境
$ java -version

3. 安装配置Maven3.2+

我这里采用的是Maven作为打包工具,Maven3.x版本都可以的,可以查看一下自己的版本是否合适。

#检查maven环境
$ mvn -v

4. 选装配置Gradle4.0+

当然我们做web开发的时候,虽然一般都是采用Maven环境,但是也可以使用Gradle来进行依赖包的下载管理。如果你的环境是Gradle,那么也可以尝试一下,注意本教程采用Maven环境!

Spring Boot提供了一个有用的Gradle插件,可以用来简化依赖声明和创建可执行的jar,我们可以参考如下Gradle依赖插件配置:

plugins {
	id 'org.springframework.boot' version '2.0.0.RELEASE'
	id 'java'
}

jar {
	baseName = 'firstProject'
	version =  '0.0.1-SNAPSHOT'
}

repositories {
	jcenter()
}

dependencies {
	compile("org.springframework.boot:spring-boot-starter-web")
	testCompile("org.springframework.boot:spring-boot-starter-test")
}

三. SpringBoot项目创建方式

以上就是我们开发SpringBoot项目之前的基本要求说明,接下来 壹哥 就开始带大家创建第一个SpringBoot项目啦,期待ing......

1. SpringBoot项目创建方式

在开始创建第一个项目之前,壹哥 先介绍一下SpringBoot项目的创建方式,我们在Intellij ideal中创建SpringBoot项目的方式可以有如下3种:

  1. 通过IDE的Spring Initializr来创建;
  2. 手动创建一个Maven工程,然后引入SpringBoot所需的dependency来完成;
  3. 通过Spring官网提供的模板来创建Spring boot项目,模板地址: https://start.spring.io/

以上这3种创建SpringBoot项目的方式,其实哪一种都可以的,当然以后大家选一个自己习惯的方式即可,接下来壹哥先采用第一种方式给大家创建一个SpringBoot项目。

因为本系列教程主要以实战为主,受限于文字格式,所以我会把项目开发过程以图片的形式,一步一步的给大家进行展示,只要你认真的跟着我的教程去做,壹哥 保证你可以学会并精通SpringBoot的用法!接下来就是正式的项目开发步骤咯,仔细看起来!

这里我先以Spring Initializr方式创建我们的第一个SpringBoot项目,以下就是具体创建步骤了。

2. 新建项目

首先我们先按下图所示,创建一个新项目,注意不是module哦!

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

3. 选择Spring Initializr

然后就会进入到如下界面,我们选择Spring Initializr即可。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

4. 设置项目的包名及坐标GAV信息

接着进入到下面的界面,进行GAV坐标设置,至于什么是GAV坐标,请复习之前壹哥给大家讲过的Maven内容。如果确实不会,可以去腾讯课堂,搜索”一一哥“,在那里我有专门的Maven详细教程,特别细哦!

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

5. 设置启动器及SpringBoot版本

接着我们选择一个SpringBoot版本,这里我采用的是SprintBoot2.2.5版本,大家自由选择即可,但是不建议采用太高版本,尽量与我一致。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

注意:

该方式默认是从spring.io官网上下载源码模板,然后自动导入的ideal中,所以对网速要求较高,有可能下载不成功! SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

6. 设置项目模块名称及存储位置

有了项目模板之后,我们接着设置项目的模块信息及存储位置,以后的案例会有很多,所以大家尽量选择一个合适的存储位置方便我们后续管理项目。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

7. 项目包结构及pom文件内容

接着打开模块的pom.xml文件,在这里查看一下其中的xml配置,这些配置项是必须的,我们省略不了哦。

这里展示的是spring-boot父项目的依赖配置。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

这里展示的是spring-boot-starter启动器配置。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

这里展示的是spring-boot提供的maven编译插件,用于和maven配置进行项目的打包编译等操作。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

8. 添加web启动器

因为我们肯定是要创建一个web项目,所以需要有一个web依赖包,这里就包含了之前SSM配置时代中很多的依赖包。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

大家可以直接把下面的依赖配置粘贴到pom.xml文件中。

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

注意:

如果你忘了添加该web启动器,会无法启动web项目哦!

9. 在项目入口处启动项目

接下来我们就可以打开java代码包,发现有一个XxxApplication类,如下图所示:

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

点击这个绿色的三角箭头,就可以启动我们的SpringBoot项目啦,开心吧。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

项目启动起来了,注意看console控制台的内容。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见 这样我们的第一个由SpringBoot创建的Web项目就启动运行起来了!

10. 项目结构

最后我再放一个全局图片,给大家看看整个项目的结构。

SpringBoot2.x系列教程02--新纪元之SpringBoot初相见

通过上面步骤完成了第一个web项目的创建,如上图所示,Spring Boot的基础结构共三个文件(具体路径根据用户生成项目时填写的Group所有差异)。

11. 工程目录结构

在上面的项目中有很多的文件,那么这些文件都是什么作用呢?壹哥 给大家细说一下。

.gitignore
│  pom.xml
│
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─syc
    │  │          └─boot
    │  │              └─demo01
    │  │                          Demo01Application.java
    │  │
    │  └─resources
    │      │  application.properties
    └─test
        └─java
            └─com
                └─syc
                    └─boot
                        └─demo01
   │  │                                  Demo01ApplicationTests.java

各目录文件作用如下:

  • src/main/java下的程序入口:Demo01Application;
  • src/main/resources下的配置文件:application.properties
  • src/test/下的测试入口:Demo01ApplicationTests.
  • .gitignore:Git 过滤配置文件
  • pom.xml:Maven 的依赖管理配置文件
  • Demo01Application.java:程序入口
  • resources:资源文件目录
    • static: 静态资源文件目录
    • templates:模板资源文件目录
    • application.properties:Spring Boot 的配置文件,实际开发中会替换成 YAML 语言配置(application.yml)

生成的Demo01Application和Demo01ApplicationTests类都可以直接运行来启动当前创建的项目,如果项目中没有添加任何数据访问或Web模块的依赖包,程序会在加载完Spring之后结束运行。

结语

至此,壹哥 就给大家介绍了SpringBoot的一些理论内容,并带大家创建了第一个SpringBoot Web项目,你学会了吗?

留个小作业:

尝试使用第2和第3种方式,创建一个SpringBoot Web项目!看看自己能不能完成,完成的在评论区666吧。