Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署

前言:

当前互联网后端开发中,JavaEE占据了主导地位。对JavaEE开发,首选框架是Spring框架。在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使Spring框架运行起来,这点备受许多开发者诟病。

随着Spring4.x发布,Spring已经完全脱离XML,只使用注解就可以运行项目。为了进一步简化Spring应用的开发,SpringBoot诞生了。它是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的搭建及开发过程,并迎合时下流行的分布式微服务设计思想,越来越多企业在使用SpringBoot。

本文重点:

1.讲解SpringBoot的设计初衷

2.讲解SpringBoot的开发环境要求

3.搭建SpringBoot的入门开发工程

4.讲解SpringBoot的配置文件常见配置

5.使用SpringBoot整合MyBatis

6.使用SpringBoot整合Redis进行简单的数据缓存

7.使用SpringBoot发送Http请求

8.使用SpringBoot进行简单代码测试

9.打包部署SpringBoot项目

一、SpringBoot简介

1.设计初衷

springboot为Spring开发者提供一种,更快速、体验更好的Spring应用开发方式。开箱即用,同时也可快速扩展,嵌入式的Tomcat。绝对没有冗余代码,无需XML配置
单纯看这句话或许你还没有感觉,但如果你做过springmvc的项目开发,tomcat和xml文件你肯定不会陌生。那上面说的内置的tomcat和没有xml配置又是什么?咱们接着往下学习,很快你就能get到了。

2.核心功能

核心能力:Spring容器、日志、自动配置AutoCongfiguration、Starters web应用的能力:MVC、嵌入式容器。

数据访问(持久化):关系型数据库、非关系型数据库强大的整合其他技术的能力

测试:强悍的应用测试。

image.png

3.开发环境要求

本文及后续文章主要基于Spring Boot 的2.1.7.RELEASES正式发行版

  • Java版本:Java8或Java 11;

  • Spring版本:5.1.8及以上;

  • 构建工具版本:Maven 3.3及以上;

  • Servlet容器版本:SpringBoot 支持如下的嵌入式Servlet容器,Spring Boot应用程序最低支持到Servlet 3.1的容器。

当然我们一般使用的都是tomcat。

image

4.Spring怎么做Web开发?

回想一下,在使用springmvc时我们怎么开发一个web项目:

  1. web.xml配置:SpringMVC核心控制器(DispatchServlet),Spring容器监听器,编码过滤器....

  2. Spring 配置:包扫描(service、dao),配置数据源,配置事务....

  3. SpringMVC配置:包扫描(controller),视图解析器,注解驱动,拦截器,静态资源....

  4. 日志配置...

  5. 编写少量业务代码

  6. 部署Tomcat 调试,每次测试都需要部署

这样总结起来,是不是很形象,很有感觉?但是如果用Spring Boot ,一切就将变得超简单。

下面我们就来体验,无需xml配置!!无感Tomcat!超迅速搭建功能强大的整套Web!的入门案例吧。

二、SpringBoot快速入门

1.Maven搭建SpringBoot工程

如果还不知道Maven,可以参见我的其它专题文章《Maven入门》和《Maven高级》。

案例目标

Maven搭建SpringBoot工程,实现web的请求响应,最终在浏览器访问在页面中输出helloworld 。

实现步骤:

  1. 创建Maven工程

  2. pom.xml文件中配置起步依赖

  3. 编写SpringBoot启动引导类

  4. 编写Controller

  5. 访问测试

实现过程:

  1. 创建Maven工程:day01_springboot_helloworld
image
image
image
image

至此,一个简单的基于maven的springboot工程框架就出来了。左侧的工程目录结构应该都比较熟悉了吧。咱们继续配置项目...

  1. pom.xml文件中配置父坐标和web的起步依赖
<?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>

    <!--继承SpringBoot父POM文件-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
    </parent>

    <groupId>abc.java</groupId>
    <artifactId>day01_springboot_helloworld</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--web开发依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>
  1. 编写SpringBoot引导类
    自己补全目录结构。


    在这里插入图片描述
package abc.java;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName HelloWorldApplication
 * @Version 1.0
 **/

@Configuration //声明是个配置类
@EnableAutoConfiguration //开启自动配置
@ComponentScan //开启包扫描
public class HelloWorldApplication {

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

  1. 编写三层架构代码:
    这里我们只编写Controller,自己补全目录结构。
package abc.java.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @ClassName HelloWorldController
 * @Version 1.0
 **/

@Controller
@RequestMapping("/day01")
public class HelloWorldController {

    @RequestMapping("/hello")
    @ResponseBody
    public String demo(){
        return "Hello World!";
    }
}

  1. 配置项目


    在这里插入图片描述

    也可以在这个位置上的Edit Configurations添加启动配置。稍微复杂一些,需要自己去找启动类。


    在这里插入图片描述

    在这里插入图片描述
  2. 访问http://localhost:8080/day01/hello测试
    点击run或者debug启动项目
    在这里插入图片描述

    访问
    在这里插入图片描述

能手敲出来就算入门了。
需要说明一下:

  1. pom需要什么依赖导入什么依赖即可。
  2. 启动引导类更简单,就是固定写法,不可能记不住。引导类是SprignBoot项目的入口,相当于类里面的main方法。
  3. controller就更不用说了,和mvc一样的,可能就是那几个注解可能不认识。没关系,这才是入门案例而已。

2.使用IDEA快速创建SpringBoot项目

刚才我们是使用的以往创建mvc项目的方法一步一步去完善项目结构,写出的springboot项目,但是在IDEA中提供了更为快捷的方式。
下面我们就开始在IDEA软件上,使用Spring Initializr方式创建SpringBoot工程,然后再一次实现入门案例的代码。但具体代码就不再提供了,因为都一样。只是创建过程更便捷。

实现步骤:

  1. 使用Spring Initializr创建SpringBoot

  2. 配置项目信息

  3. 勾选起步依赖

  4. 配置文件存储路径地址

  5. 再次编写入门案例三层架构代码

  6. 访问http://localhost:8080/hello接口测试

实现过程:

  1. 使用Spring Initializr创建SpringBoot工程

先说明一下,使用这种方式是需要联网的,如果你网络不好可能会需要多等待一会儿。如果等的太久,还是像入门案例那样,自己手动建maven项目吧。

在这里插入图片描述
  1. 配置项目信息


    在这里插入图片描述

图片中尤其需要注意的是,启动引导类的位置必须和三层的目录在同一级别,而不是和三层里面的类一个级别。

  1. 勾选起步依赖
    这里勾选了两个起步依赖。


    在这里插入图片描述
  2. 配置文件存储路径地址
    是不是很眼熟...一般不需要修改。
    在这里插入图片描述

    项目刚创建好之后,会进入很熟悉的界面,但是不要着急操作,下面的红框看一下,还在加载东西,刚才勾选的依赖都在导入,免得着急操作搞崩了。经验之谈...
    在这里插入图片描述

    如果你能看到这个DashBoard的提示,就展开它,选则开启DashBoard。如果没有也没关系,项目一样可以运行。
    当然,也有办法能手动打开.参考着https://blog.csdn.net/m18633778874/article/details/82687389自己打开就行。有它会让你的操作方便很多,可能现在体会不出来,回头做微服务的时候,一个工程下面几十个springboot项目,如果没有它可能会比较繁琐一些。
    在这里插入图片描述

在这里插入图片描述

创建好之后的项目结构如下:
把把标注的几个目录结构删除就行,用不到。
在这里插入图片描述

最后,你就会看到和我们之前手动创建的项目结构是一模一样的。
在这里插入图片描述

看一下自动创建的pom.xml文件。
在这里插入图片描述

截图没截全,下面还有个maven插件。毕竟是maven项目,一般不用。
在这里插入图片描述

再来看一看自动创建的启动引导类。目录结构是不是和我们改完之后的一样?main方法里面的代码是不是也一样?

一般情况下,我们肯定是只写简单的1个了。没办法,程序员都懒...


在这里插入图片描述

不同点在于注解:我们写了3个,他写了1个。为什么呢?

**@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan **
为什么这么说呢?点进@SpringBootApplication这个注解类看一下就知道了。


在这里插入图片描述

没看到@Configuration?再点进SpringBootConfiguration看,原来它是被Configuration给标记的,本身也是个用来标识配置的注解。所以传承先来不难理解了吧?


在这里插入图片描述

再往后就是编写入门案例三层架构代码,访问http://localhost:8080/hello接口测试,我们就不再重复写代码了。

3. 官网联网创建springboot项目

  1. 进入官网:https://start.spring.io/

    在这里插入图片描述

  2. 选择依赖


    在这里插入图片描述
  3. 生成项目文件,压缩包,解压到指定目录


    在这里插入图片描述
  4. 从IDEA中导入解压好的项目


    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
  5. 调整项目目录结构


    在这里插入图片描述

以上就是创建springboot项目的3中方式。后两种需要用网络,酌情使用即可。

提示:

用第一种方式或者偶尔不记得依赖maven坐标的时候,可以去maven仓库去查一下,找到合适的版本的地址,复制过来粘到pom文件里即可。

在这里插入图片描述

4. SpringBoot工程热部署

首先说,为什么需要热部署。没有热部署,每次修改代码后都需要重新部署项目,如果代码量比较多,修改次数比较多,反复操作比较繁琐。

实现热部署步骤

  1. 导入热部署依赖坐标
<!--spring-boot开发工具jar包,支持热部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
  1. 开启IDEA自动编译支持
    默认情况IDEA不会自动编译,需要设置Build Project Automatically。打上勾即可。需要说明,这个自动编译是每个项目都有各自的自动编译设置,不同项目都需要分别设置。
    在这里插入图片描述
  2. 修改注册表
    同时按下“ ctrl + shift + alt + / ” 组合键,会弹出Maintenance维护菜单,选择Registry(注册表)。需要说明的是,这个和自动编译不一样,改一次,以后就都生效了。
    进去后,找到“允许运行期间启用自动编译”,看下图的英文哈,我懒得敲英文了。打上勾,close就行了。
    在这里插入图片描述

    如果按照以上操作后,修改项目代码时,发现没有自动部署,重启IDEA。
    如果还不行,那就不行吧,无所谓的,因为本来也是时灵时不灵...手动“锤”一下来的更实际,绝对不会不成功。
    在这里插入图片描述

三、SpringBoot原理分析

1.starters的原理

starters是依赖关系的整理和封装,是一系列关联依赖坐标的整合
每个Starter包含了当前功能下的许多必备依赖坐标,这些依赖坐标是项目开发、上线和运行必须的,同时这些依赖也支持依赖传递。它可以让导入应用开发的依赖坐标更方便。举例:spring-boot-starter-web 包含了所有web开发必须的依赖坐标。
不理解?没关系,看图说话。

我们从maven的依赖结构或者点进starter-web去看,都可以看出starter里面其实封装了很多的依赖,他们共同组成了这个starter,所以有了这个starter就相当于有了开发web项目所必须的全部依赖,而不需要像以前一样,把下图中左侧的零散的依赖挨个复制粘贴一遍,因为已经合而为一了。
这也是"Write Less Do More"的一个真实写照。

在这里插入图片描述

starter的命名规范:官方的starter写法"spring-boot-starter-xxx" ,非官方的starter写法“第三方项目名-springboot-starter”

常用的starters可以自己查看一下官方文档。总之,非常多。

在这里插入图片描述

2. 依赖管理(Dependency Management)

  1. 继承了spring-boot-starter-parent 的好处和特点
  • 默认编译Java 1.8
  • 默认编码UTF-8
    为什么这么说?看spring-boot-starter-parent 的properties标签。


    在这里插入图片描述
  • 通过spring-boot-denpendencies的pom管理所有公共Starter依赖的版本。
    为什么这么说?我们再去点spring-boot-starter-parent看它的父级spring-boot-dependencies。我们发现,其实所有的依赖其实是在spring-boot-dependenciymanagement里面配置的。


    在这里插入图片描述

    所有的版本也都已经再这里限定了。


    在这里插入图片描述

dependencymanagement和dependencies 标签的区别:父类放在dependencymanagement中的依赖,子类继承后并不会直接显现,而是可以从里面随用随取地导入依赖使用,不显式地声明使用,就不会生效;
而dependencies里面的starter,不管用不用,写在父类里,子类直接继承并生效。

  1. POM文件中的Maven插件
<!-- 作用:可以将一个SpringBoot的工程打包成为可执行的jar包 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

如果想使用父pom文件中的任何插件,无需配置即可直接使用。

3.自动配置

SpringBoot采用约定大于配置设计思想,将所有可能遇到的配置信息提前配置好,写在自动配置的jar

包中。每个Starter基本都会有对应的自动配置。

自动配置的值在哪里?
查看启动类注解@SpringBootApplication
追踪步骤:
1.@EnableAutoConfiguration
2.@Import({AutoConfigurationImportSelector.class})

在这里插入图片描述

3.spring.factories
在这里插入图片描述

4.org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfigur ation
5.@EnableConfigurationProperties({ServerProperties.class})
6.private final ServerProperties.Tomcat tomcat = new ServerProperties.Tomcat();
在这里插入图片描述

在这里插入图片描述

知道有自动配置就行了,没必要深究。实用意义不大。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容