当前互联网后端开发中,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为Spring开发者提供一种,更快速、体验更好的Spring应用开发方式。开箱即用,同时也可快速扩展,嵌入式的Tomcat。绝对没有冗余代码,无需XML配置。
单纯看这句话或许你还没有感觉,但如果你做过springmvc的项目开发,tomcat和xml文件你肯定不会陌生。那上面说的内置的tomcat和没有xml配置又是什么?咱们接着往下学习,很快你就能get到了。
核心能力:Spring容器、日志、自动配置AutoCongfiguration、Starters web应用的能力:MVC、嵌入式容器。
数据访问(持久化):关系型数据库、非关系型数据库强大的整合其他技术的能力
测试:强悍的应用测试。
本文及后续文章主要基于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。
回想一下,在使用springmvc时我们怎么开发一个web项目:
web.xml配置:SpringMVC核心控制器(DispatchServlet),Spring容器监听器,编码过滤器…
Spring 配置:包扫描(service、dao),配置数据源,配置事务…
SpringMVC配置:包扫描(controller),视图解析器,注解驱动,拦截器,静态资源…
日志配置…
编写少量业务代码
部署Tomcat 调试,每次测试都需要部署
这样总结起来,是不是很形象,很有感觉?但是如果用Spring Boot ,一切就将变得超简单。
下面我们就来体验,无需xml配置!!无感Tomcat!超迅速搭建功能强大的整套Web!的入门案例吧。
如果还不知道Maven,可以参见我的其它专题文章《Maven入门》和《Maven高级》。
案例目标:
Maven搭建SpringBoot工程,实现web的请求响应,最终在浏览器访问在页面中输出helloworld 。
实现步骤:
创建Maven工程
pom.xml文件中配置起步依赖
编写SpringBoot启动引导类
编写Controller
访问测试
实现过程:
至此,一个简单的基于maven的springboot工程框架就出来了。左侧的工程目录结构应该都比较熟悉了吧。咱们继续配置项目…
<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>
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);
}
}
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!";
}
}
能手敲出来就算入门了。
需要说明一下:
- pom需要什么依赖导入什么依赖即可。
- 启动引导类更简单,就是固定写法,不可能记不住。引导类是SprignBoot项目的入口,相当于类里面的main方法。
- controller就更不用说了,和mvc一样的,可能就是那几个注解可能不认识。没关系,这才是入门案例而已。
刚才我们是使用的以往创建mvc项目的方法一步一步去完善项目结构,写出的springboot项目,但是在IDEA中提供了更为快捷的方式。
下面我们就开始在IDEA软件上,使用Spring Initializr方式创建SpringBoot工程,然后再一次实现入门案例的代码。但具体代码就不再提供了,因为都一样。只是创建过程更便捷。
实现步骤:
使用Spring Initializr创建SpringBoot
配置项目信息
勾选起步依赖
配置文件存储路径地址
再次编写入门案例三层架构代码
访问http://localhost:8080/hello接口测试
实现过程:
先说明一下,使用这种方式是需要联网的,如果你网络不好可能会需要多等待一会儿。如果等的太久,还是像入门案例那样,自己手动建maven项目吧。
图片中尤其需要注意的是,启动引导类的位置必须和三层的目录在同一级别,而不是和三层里面的类一个级别。
创建好之后的项目结构如下:
把把标注的几个目录结构删除就行,用不到。
最后,你就会看到和我们之前手动创建的项目结构是一模一样的。
看一下自动创建的pom.xml文件。
截图没截全,下面还有个maven插件。毕竟是maven项目,一般不用。
再来看一看自动创建的启动引导类。目录结构是不是和我们改完之后的一样?main方法里面的代码是不是也一样?
一般情况下,我们肯定是只写简单的1个了。没办法,程序员都懒…
不同点在于注解:我们写了3个,他写了1个。为什么呢?
**@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan **
为什么这么说呢?点进@SpringBootApplication这个注解类看一下就知道了。
没看到@Configuration?再点进SpringBootConfiguration看,原来它是被Configuration给标记的,本身也是个用来标识配置的注解。所以传承先来不难理解了吧?
再往后就是编写入门案例三层架构代码,访问http://localhost:8080/hello接口测试,我们就不再重复写代码了。
以上就是创建springboot项目的3中方式。后两种需要用网络,酌情使用即可。
用第一种方式或者偶尔不记得依赖maven坐标的时候,可以去maven仓库去查一下,找到合适的版本的地址,复制过来粘到pom文件里即可。
首先说,为什么需要热部署。没有热部署,每次修改代码后都需要重新部署项目,如果代码量比较多,修改次数比较多,反复操作比较繁琐。
<!--spring-boot开发工具jar包,支持热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
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可以自己查看一下官方文档。总之,非常多。
dependencymanagement和dependencies 标签的区别:父类放在dependencymanagement中的依赖,子类继承后并不会直接显现,而是可以从里面随用随取地导入依赖使用,不显式地声明使用,就不会生效;
而dependencies里面的starter,不管用不用,写在父类里,子类直接继承并生效。
<!-- 作用:可以将一个SpringBoot的工程打包成为可执行的jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果想使用父pom文件中的任何插件,无需配置即可直接使用。
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();
知道有自动配置就行了,没必要深究。实用意义不大。