Spring Boot基础篇

SpringBoot

文档更新日志

版本 更新日期 操作 描述
v1.0 2021/11/14 A 基础篇
v1.0.1 2021/11/30 U 更新基础篇错别字若干,不涉及内容变更
v2.0 2021/12/01 A 运维实用篇
V3.0 2022/2/21 A 开发实用篇
V4.0 2022/3/29 A 原理篇

前言

​很荣幸有机会能以这样的形式和互联网上的各位小伙伴一起学习交流技术课程,这次给大家带来的是Spring家族中比较重要的一门技术课程——SpringBoot。一句话介绍这个技术,应该怎么说呢?现在如果开发Spring程序不用SpringBoot那就是给自己过不去,SpringBoot为我们开发Spring程序提供了太多的帮助,在此借这个机会给大家分享这门课程,希望各位小伙伴学有所得,学有所用,学有所成。

​正如上面提到的,这门技术是用来加速开发Spring程序的,因此学习这门技术是有一定的门槛的。你可以理解为你现在是一门传统的手工艺人,现在工艺升级,可以加速你的生产制作过程,但是前提是你要会原始工艺,然后才能学习新的工艺。嗯,怎么说呢?有一定的门槛,至少Spring怎么回事,与Spring配合在一起工作的一堆技术又是怎么回事,这些搞明白才能来看这个技术,不然就只能学个皮毛,或者学着学着就开始因为其他技术不太过关,然后就学不下去了,然后,就没有然后了,果断弃坑了。不管怎么说,既来之则安之,加油学习吧,投资自己肯定是没毛病的。

课程内容说明

​SpringBoot这门技术课程所包含的技术点其实并不是很多,但是围绕着SpringBoot的周边知识,也就是SpringBoot整合其他技术,这样的知识量很大,例如SpringBoot整合MyBatis等等。因此为了能够将本课程制作的能够适应于各个层面的学习者进行学习,本套课程会针对小白,初学者,开发者三种不同的人群来设计全套课程。具体这三种人群如何划分,就按照我的描述形式来分吧,各位小伙伴可以对号入座,每种人群看课程的起始位置略有差别。

学习者 归类方式
小白 完全没有用过SpringBoot技术
初学者 能使用SpringBoot技术完成基础的SSM整合
开发者 能使用SpringBoot技术实现常见的技术整合工作

​简单说就是你能用SpringBoot做多少东西,一点不会就是小白,会一点就是初学者,大部分都会就是开发者。其实这个划分也不用过于纠结,这个划分仅仅是为了帮助你对本技术课程所包含的阶段模块划分做一个清晰认知,因为本课程中会将SpringBoot技术划分成4个单元,每个单元是针对不同的学习者准备的。

学习者 课程单元
小白 基础篇
初学者 应用篇( 运维实用篇 & 开发实用篇 )
开发者 原理篇

​看完这个划分你就应该有这么个概念,我没有用过SpringBoot技术,所以从基础篇开始学习;或者我会一点SpringBoot技术,那我从实用篇开始学就好了,就是这个意思。

​每个课程单元内容设置不同,目标也不一样,作为学习者如果想达成最佳的学习效果,最好明确自己的学习目标再进行学习,这样目标明确,学习的时候能够更轻松,你就不会在学习的时候纠结如下的问题了。比如学着基础篇在那想,这个东西是个什么原理啊?这个东西是这么用的,那个东西该怎么用啊?因为原理性的内容统一放置到了原理篇讲解了,应用相关的内容统一放到应用篇里面讲解,你在基础篇阶段纠结也没有用,这一部分不讲这些知识,在基础篇先把SpringBoot的基础使用掌握完再说后面的知识吧。

​此外还有一点需要说明的是,目前SpringBoot技术发展速度很快,更新速度也很快,因此后续还会对本套课程进行持续更新,特此在三个课程单元的基础上追加一个番外篇。番外篇的设置为了解决如下问题:

  • 持续更新SpringBoot后续发展出现的新技术
  • 讲解部分知识点规模较大的支线知识(例如WebFlux)
  • 扩展非实用性知识,扩展学习者视野

​每一个课程单元的学习目标如下,请各位查收,在学习的过程中可以阶段性的给自己提个问题,下面列出来的这些学习目标你是否达成了,可以检验你的学习成果。

课程单元 学习目标
基础篇 能够创建SpringBoot工程基于SpringBoot实现ssm/ssmp整合
应用篇 能够掌握SpringBoot程序多环境开发能够基于Linux系统发布SpringBoot工程能够解决线上灵活配置SpringBoot工程的需求能够基于SpringBoot整合任意第三方技术
原理篇 掌握SpringBoot内部工作流程理解SpringBoot整合第三方技术的原理实现自定义开发整合第三方技术的组件
番外篇 掌握SpringBoot整合非常见的第三方技术掌握相同领域的更多的解决方案,并提升同领域方案设计能力

​整体课程包含的内容就是这些啦,要想完成前面这些内容的学习,顺利的达成学习目标,有些东西还是要提前和大家说清楚的。SpringBoot课程不像是Java基础,不管你有没有基础,都可以听一听,这个课程还真不行,需要一定的前置知识。下面给大家列表一些前置知识,如果还有不太会的,需要想办法快速补救一下。

课程前置知识说明

课程单元 前置知识 要求
基础篇 Java基础语法 面向对象,封装,继承,多态,类与接口,集合,IO,网络编程等
基础篇 Spring与SpringMVC 知道Spring是用来管理bean,能够基于Restful实现页面请求交互功能
基础篇 Mybatis与Mybatis-Plus 基于Mybatis和MybatisPlus能够开发出包含基础CRUD功能的标准Dao模块
基础篇 数据库MySQL 能够读懂基础CRUD功能的SQL语句
基础篇 服务器 知道服务器与web工程的关系,熟悉web服务器的基础配置
基础篇 maven 知道maven的依赖关系,知道什么是依赖范围,依赖传递,排除依赖,可选依赖,继承
基础篇 web技术(含vue,ElementUI) 知道vue如何发送ajax请求,如何获取响应数据,如何进行数据模型双向绑定
应用篇 Linux(CenterOS7) 熟悉常用的Linux基础指令,熟悉Linux系统目录结构
应用篇 实用开发技术 缓存:Redis、MongoDB、……消息中间件:RocketMq、RabbitMq、……
原理篇 Spring 了解Spring加载bean的各种方式知道Spring容器底层工作原理,能够阅读简单的Spring底层源码

​看着略微有点多,其实还好吧,如果个别技术真的不会,在学习课程的时候多用心听就好,基础篇是可以跟着学下来了,后面的实用篇和原理篇就比较难了。比如我要在Linux系统下操作,命令我就直接使用了,然后你看不懂可能学习起来就比较心累了。

课程安排就说到这里了,下面进入到SpringBoot基础篇的学习

SpringBoot基础篇

在基础篇中,我给学习者的定位是先上手,能够使用SpringBoot搭建基于SpringBoot的web项目开发,所以内容设置较少,主要包含如下内容:

  • SpringBoot快速入门
  • SpringBoot基础配置
  • 基于SpringBoot整合SSMP

JC-1.快速上手SpringBoot

学习任意一项技术,首先要知道这个技术的作用是什么,不然学完以后,你都不知道什么时候使用这个技术,也就是技术对应的应用场景。SpringBoot技术由Pivotal团队研发制作,功能的话简单概括就是加速Spring程序的开发,这个加速要从如下两个方面来说

  • Spring程序初始搭建过程
  • Spring程序的开发过程

​ 通过上面两个方面的定位,我们可以产生两个模糊的概念:

  • SpringBoot开发团队认为原始的Spring程序初始搭建的时候可能有些繁琐,这个过程是可以简化的,那原始的Spring程序初始搭建过程都包含哪些东西了呢?为什么觉得繁琐呢?最基本的Spring程序至少有一个配置文件或配置类,用来描述Spring的配置信息,莫非这个文件都可以不写?此外现在企业级开发使用Spring大部分情况下是做web开发,如果做web开发的话,还要在加载web环境时加载时加载指定的spring配置,这都是最基本的需求了,不写的话怎么知道加载哪个配置文件/配置类呢?那换了SpringBoot技术以后呢,这些还要写吗?谜底稍后揭晓,先卖个关子
  • SpringBoot开发团队认为原始的Spring程序开发的过程也有些繁琐,这个过程仍然可以简化。开发过程无外乎使用什么技术,导入对应的jar包(或坐标)然后将这个技术的核心对象交给Spring容器管理,也就是配置成Spring容器管控的bean就可以了。这都是基本操作啊,难道这些东西SpringBoot也能帮我们简化?
  • ​ 带着上面这些疑问我们就着手第一个SpringBoot程序的开发了,看看到底使用SpringBoot技术能简化开发到什么程度。

    温馨提示

    如果对Spring程序的基础开发不太懂的小伙伴,看到这里可以弃坑了,下面的内容学习需要具备Spring技术的知识,硬着头皮学不下去的。

    JC-1-1.SpringBoot入门程序制作(一)

    下面让我们开始做第一个SpringBoot程序吧,本课程基于Idea2020.3版本制作,使用的Maven版本为3.6.1,JDK版本为1.8。如果你的环境和上述环境不同,可能在操作界面和操作过程中略有不同,只要软件匹配兼容即可(说到这个Idea和Maven,它们两个还真不是什么版本都能搭到一起的,说多了都是泪啊)。

    下面使用SpringBoot技术快速构建一个SpringMVC的程序,通过这个过程体会简化二字的含义。

    步骤①:创建新模块,选择Spring Initializr,并配置模块相关基础信息

    image-20211116125259385.png

    特别关注:第3步点击Next时,Idea需要联网状态才可以进入到后面那一页,如果不能正常联网,就无法正确到达右面那个设置页了,会一直联网转转转。

    特别关注:第5步选择java版本和你计算机上安装的JDK版本匹配即可,但是最低要求为JDK8或以上版本,推荐使用8或11。

    步骤②:选择当前模块需要使用的技术集

    image-20211116125615728.png

    按照要求,左侧选择web,然后在中间选择Spring Web即可,选完右侧就出现了新的内容项,这就表示勾选成功了。

    关注:此处选择的SpringBoot的版本使用默认的就可以了,需要说一点,SpringBoot的版本升级速度很快,可能昨天创建工程的时候默认版本是2.5.4,今天再创建工程默认版本就变成2.5.5了,差别不大,无需过于纠结,并且还可以到配置文件中修改对应的版本。

    步骤③:开发控制器类

    //Rest模式
    @RestController
    @RequestMapping("/books")
    public class BookController {
        @GetMapping
        public String getById(){
            System.out.println("springboot is running...");
            return "springboot is running...";
        }
    }
    

    入门案例制作的SpringMVC的控制器基于Rest风格开发,当然此处使用原始格式制作SpringMVC的程序也是没有问题的,上例中的@RestController与@GetMapping注解是基于Restful开发的典型注解。

    关注:做到这里SpringBoot程序的最基础的开发已经做完了,现在就可以正常的运行Spring程序了。可能有些小伙伴会有疑惑,Tomcat服务器没有配置,Spring也没有配置,什么都没有配置这就能用吗?这就是SpringBoot技术的强大之处。关于内部工作流程后面再说,先专心学习开发过程。

    步骤④:运行自动生成的Application类

    image-20211116130152452.png

    使用带main方法的java程序的运行形式来运行程序,运行完毕后,控制台输出上述信息。

    不难看出,运行的信息中包含了8080的端口,Tomcat这种熟悉的字样,难道这里启动了Tomcat服务器?是的,这里已经启动了。那服务器没有配置,哪里来的呢?后面再说。现在你就可以通过浏览器访问请求的路径,测试功能是否工作正常了。

    访问路径:    http://localhost:8080/books
    

    是不是感觉很神奇?当前效果其实依赖的底层逻辑还是很复杂的,但是从开发者角度来看,目前只有两个文件展现到了开发者面前。

    • pom.xml

      这是maven的配置文件,描述了当前工程构建时相应的配置信息。

      
      
          4.0.0
      
              org.springframework.boot
              spring-boot-starter-parent
              2.5.4
      
          com.itheima
          springboot_01_01_quickstart
          0.0.1-SNAPSHOT
      
                  org.springframework.boot
                  spring-boot-starter-web
      
                  org.springframework.boot
                  spring-boot-starter-test
                  test
      
      

      配置中有两个信息需要关注,一个是parent,也就是当前工程继承了另外一个工程,干什么用的后面再说,还有依赖坐标,干什么用的后面再说。

    • Application类

      @SpringBootApplication
      public class Application {
          public static void main(String[] args) {
              SpringApplication.run(Application.class, args);
          }
      }
      

      这个类功能很简单,就一句代码,前面运行程序就是运行的这个类。

    ​ 到这里我们可以大胆推测一下,如果上面这两个文件没有的话,SpringBoot肯定没法玩,看来核心就是这两个文件了。由于是制作第一个SpringBoot程序,先不要关注这两个文件的功能,后面详细讲解内部工作流程。

    ​ 通过上面的制作,我们不难发现,SpringBoot程序简直太好写了,几乎什么都没写,功能就有了,这也是SpringBoot技术为什么现在这么火的原因,和Spring程序相比,SpringBoot程序在开发的过程中各个层面均具有优势。

    类配置文件 Spring SpringBoot
    pom文件中的坐标 手工添加 勾选添加
    web3.0配置类 手工制作
    Spring/SpringMVC配置类 手工制作
    控制器 手工制作 手工制作

    一句话总结一下就是能少写就少写,能不写就不写,这就是SpringBoot技术给我们带来的好处,行了,现在你就可以动手做一做SpringBoot程序了,看看效果如何,是否真的帮助你简化开发了。

    总结

  • 开发SpringBoot程序在Idea工具中基于联网的前提下可以根据向导快速制作
  • SpringBoot程序需要依赖JDK,版本要求最低为JDK8
  • SpringBoot程序中需要使用某种功能时可以通过勾选的形式选择技术,也可以手工添加对应的要使用的技术(后期讲解)
  • 运行SpringBoot程序通过运行Application程序进行
  • 思考

    前面制作的时候说过,这个过程必须联网才可以进行,但是有些时候你会遇到一些莫名其妙的问题,比如基于Idea开发时,你会发现你配置了一些坐标,然后Maven下载对应东西的时候死慢死慢的,甚至还会失败。其实这种现象和Idea这款IDE工具有关,万一Idea不能正常访问网络的话,我们是不是就无法制作SpringBoot程序了呢?咱们下一节再说。

    JC-1-2.SpringBoot入门程序制作(二)

    如果Idea不能正常联网,这个SpringBoot程序就无法制作了吗?开什么玩笑,世上IDE工具千千万,难道SpringBoot技术还必须基于Idea来做了?这是不可能的。开发SpringBoot程序可以不基于IDE工具进行,在SpringBoot官网中可以直接创建SpringBoot程序。

    SpringBoot官网和Spring的官网是在一起的,都是 spring.io 。你可以通过项目一级一级的找到SpringBoot技术的介绍页,然后在页面中间部位找到如下内容

    image-20211122150444816.png

    步骤①:点击Spring Initializr后进入到创建SpringBoot程序界面,接下来就是输入信息的过程,和在Idea中制作是一样的,只是界面发生了变化,根据自己的要求,在左侧选择对应信息和输入对应的信息。

    image-20211122150608039.png application.yml > application.yaml