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、嵌入式容器。

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

测试:强悍的应用测试。

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

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。

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

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

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

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

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

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

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

  1. pom.xml文件中配置父坐标和web的起步依赖

<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.0modelVersion>

    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.1.7.RELEASEversion>
    parent>

    <groupId>abc.javagroupId>
    <artifactId>day01_springboot_helloworldartifactId>
    <version>1.0-SNAPSHOTversion>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>

project>
  1. 编写SpringBoot引导类
    自己补全目录结构。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第7张图片
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. 配置项目
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第8张图片
    也可以在这个位置上的Edit Configurations添加启动配置。稍微复杂一些,需要自己去找启动类。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第9张图片
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第10张图片
  2. 访问http://localhost:8080/day01/hello测试
    点击run或者debug启动项目
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第11张图片
    访问
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第12张图片

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

  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项目吧。

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

  1. 配置项目信息
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第14张图片

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

  1. 勾选起步依赖
    这里勾选了两个起步依赖。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第15张图片
  2. 配置文件存储路径地址
    是不是很眼熟…一般不需要修改。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第16张图片
    项目刚创建好之后,会进入很熟悉的界面,但是不要着急操作,下面的红框看一下,还在加载东西,刚才勾选的依赖都在导入,免得着急操作搞崩了。经验之谈…
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第17张图片
    如果你能看到这个DashBoard的提示,就展开它,选则开启DashBoard。如果没有也没关系,项目一样可以运行。
    当然,也有办法能手动打开.参考着https://blog.csdn.net/m18633778874/article/details/82687389自己打开就行。有它会让你的操作方便很多,可能现在体会不出来,回头做微服务的时候,一个工程下面几十个springboot项目,如果没有它可能会比较繁琐一些。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第18张图片

Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第19张图片
创建好之后的项目结构如下:
把把标注的几个目录结构删除就行,用不到。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第20张图片
最后,你就会看到和我们之前手动创建的项目结构是一模一样的。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第21张图片
看一下自动创建的pom.xml文件。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第22张图片
截图没截全,下面还有个maven插件。毕竟是maven项目,一般不用。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第23张图片
再来看一看自动创建的启动引导类。目录结构是不是和我们改完之后的一样?main方法里面的代码是不是也一样?

一般情况下,我们肯定是只写简单的1个了。没办法,程序员都懒…
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第24张图片
不同点在于注解:我们写了3个,他写了1个。为什么呢?

**@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan **
为什么这么说呢?点进@SpringBootApplication这个注解类看一下就知道了。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第25张图片
没看到@Configuration?再点进SpringBootConfiguration看,原来它是被Configuration给标记的,本身也是个用来标识配置的注解。所以传承先来不难理解了吧?
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第26张图片

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

3. 官网联网创建springboot项目

  1. 进入官网:https://start.spring.io/
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第27张图片

  2. 选择依赖
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第28张图片

  3. 生成项目文件,压缩包,解压到指定目录
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第29张图片

  4. 从IDEA中导入解压好的项目
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第30张图片
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第31张图片
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第32张图片

  5. 调整项目目录结构
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第33张图片

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

提示:

用第一种方式或者偶尔不记得依赖maven坐标的时候,可以去maven仓库去查一下,找到合适的版本的地址,复制过来粘到pom文件里即可。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第34张图片

4. SpringBoot工程热部署

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

实现热部署步骤

  1. 导入热部署依赖坐标
<!--spring-boot开发工具jar包,支持热部署-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>
  1. 开启IDEA自动编译支持
    默认情况IDEA不会自动编译,需要设置Build Project Automatically。打上勾即可。需要说明,这个自动编译是每个项目都有各自的自动编译设置,不同项目都需要分别设置。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第35张图片
  2. 修改注册表
    同时按下“ ctrl + shift + alt + / ” 组合键,会弹出Maintenance维护菜单,选择Registry(注册表)。需要说明的是,这个和自动编译不一样,改一次,以后就都生效了。
    进去后,找到“允许运行期间启用自动编译”,看下图的英文哈,我懒得敲英文了。打上勾,close就行了。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第36张图片
    如果按照以上操作后,修改项目代码时,发现没有自动部署,重启IDEA。
    如果还不行,那就不行吧,无所谓的,因为本来也是时灵时不灵…手动“锤”一下来的更实际,绝对不会不成功。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第37张图片

三、SpringBoot原理分析

1.starters的原理

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

我们从maven的依赖结构或者点进starter-web去看,都可以看出starter里面其实封装了很多的依赖,他们共同组成了这个starter,所以有了这个starter就相当于有了开发web项目所必须的全部依赖,而不需要像以前一样,把下图中左侧的零散的依赖挨个复制粘贴一遍,因为已经合而为一了。
这也是"Write Less Do More"的一个真实写照。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第38张图片

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

常用的starters可以自己查看一下官方文档。总之,非常多。
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第39张图片

2. 依赖管理(Dependency Management)

  1. 继承了spring-boot-starter-parent 的好处和特点
  • 默认编译Java 1.8
  • 默认编码UTF-8
    为什么这么说?看spring-boot-starter-parent 的properties标签。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第40张图片
  • 通过spring-boot-denpendencies的pom管理所有公共Starter依赖的版本。
    为什么这么说?我们再去点spring-boot-starter-parent看它的父级spring-boot-dependencies。我们发现,其实所有的依赖其实是在spring-boot-dependenciymanagement里面配置的。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第41张图片
    所有的版本也都已经再这里限定了。
    Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第42张图片

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})
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第43张图片
3.spring.factories
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第44张图片
4.org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfigur ation
5.@EnableConfigurationProperties({ServerProperties.class})
6.private final ServerProperties.Tomcat tomcat = new ServerProperties.Tomcat();
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第45张图片
Java成长之路(一)--SpringBoot基础学习--3种项目创建及热部署_第46张图片

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

你可能感兴趣的:(spring,boot,spring,java)