1. SpringBoot简介
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化老的Spring 应用开发。该框架使用了自动方式来对开发工程进行配置,减少开发人员定义配置复杂度。
1.1 设计初衷
- 为Spring开发者提供一种,更快速、体验更好的Spring应用开发方式。
- 开箱即用,同时也可快速扩展,嵌入式的Tomcat。
- 绝对没有冗余代码,无需XML配置。
1.2 核心功能
- 核心能力:Spring容器、日志、自动配置AutoCongfiguration、Starters
- web应用的能力:MVC、嵌入式容器
- 数据访问(持久化):关系型数据库、非关系型数据库
- 强大的整合其他技术的能力
- 测试:强悍的应用测试
1.2.1 SpringBoot在开发中的地位
1、农业时代Java开发方式:
- 基于Java底层原生API,纯手动去实现,典型技术Html、JavaScript、CSS,JDBC,DBUtils,Socket…..
- 框架是拯救者,解放了农业时代的程序猿们,框架为我们做的更多
2、工业时代Java开发方式:
- 各种框架一顿搞:典型代表Spring,SpringMVC,Mybatis,Hibernate,Struts,Freemaker,JBPM…
- 微服务是拯救者,解放了工业时代的程序猿们,微服务让我们过上了小康生活
3、现代化Java开发方式:
- SpringBoot整合并简化一切Spring应用开发中的技术
- 各种SpringCloud微服务:服务注册与发现,负载均衡与熔断,网关和集群
- 想要学习SpringCloud的整套微服务架构系统,必先学习SpringBoot,它是SpringCloud的基础。SpringCloud项目都是SpringBoot开发出来的。
4、人工智能化的Java开发方式:
- 在未来。智能Ai可以替我们写代码,到时候我们都就做机器人的指挥者,不用干活。闲余时间天天玩游戏…
1.3 开发环境要求
- Spring Boot 的2.1.7.RELEASES正式发行版
- 使用Java8或 Java 11
- Spring版本是5.1.9及以上
- 构建工具版本:Maven ,版本要求是3.3及以上。
- Servlet容器版本:Spring Boot应用程序最低支持到Servlet 3.1的容器
Name | Servlet Version |
---|---|
Tomcat 9.0 | 4.0 |
Jetty 9.4 | 3.1 |
Undertow 2.0 | 4.0 |
1.4 Spring怎么做Web开发?
我们怎么开发一个web项目:
- web.xml配置:SpringMVC核心控制器(DispatchServlet),Spring容器监听器,编码过滤器….
- Spring 配置:包扫描(service、dao),配置数据源,配置事务….
- SpringMVC配置:包扫描(controller),视图解析器,注解驱动,拦截器,静态资源….
- 日志配置
- 少量业务代码
- …
- 部署 Tomcat 调试,每次测试都需要部署
- …
但是如果用 Spring Boot 呢?
超简单!无需配置!!无感Tomcat!超迅速搭建功能强大的整套 Web!到底多简单?入门案例揭晓。
2. SpringBoot快速入门
2.1 Maven搭建SpringBoot工程
Maven搭建SpringBoot工程,实现web的请求响应。浏览器访问在页面中输出 helloworld 。
2.1.1 实现步骤
- 创建Maven工程
- pom.xml文件中配置起步依赖
- 编写SpringBoot启动引导类
- 编写Controller
- 访问http://localhost:8080/hello 测试
2.1.2 实现过程
2.1.2.1 创建Maven工程
2.1.2.2 配置起步依赖
在pom.xml文件中配置父坐标和web的起步依赖
1 |
|
2.1.2.3 编写SpringBoot引导类
1 | /** |
2.1.2.4 编写Controller
1 | /** |
2.1.2.5 访问测试
2.2 使用IDEA快速创建SpringBoot项目
使用Spring Initializr 方式创建SpringBoot工程。然后实现入门案例的代码。
2.2.1 实现步骤
- 创建SpringBoot项目:使用Spring Initializr
- 配置项目元信息
- 勾选起步依赖
- 再次编写controller
- 访问接口测试:http://localhost:8080/hello
2.2.2 实现过程
2.2.2.1 使用Spring Initializr创建工程
2.2.2.2 配置项目信息
2.2.2.3 勾选起步依赖
创建完成后工程目录结构
1 | /** |
pom文件介绍
2.2.2.4 编写Controller
同上案例
2.2.2.5 访问测试
2.3 SpringBoot工程热部署(LiveReload)
每次重启服务很麻烦,可以使用热部署方式
2.3.1 实现步骤
2.3.1.1 添加热部署支持的依赖坐标
1 | <!--spring-boot开发工具jar包,支持热部署--> |
2.3.1.2 开启自动编译
默认情况IDEA不会自动编译
如何开启自动编译:需要设置
Build Project Automatically
如何开启运行时自动编译:快捷键
Shift + Ctrl + Alt + /
打开Maintenance维护,选择Registry(注册表)开启运行时自动编译
注意:配置完成之后,IDEA进行热部署,偶尔也会失败。
3. SpringBoot原理分析
3.1 依赖管理的原理
继承了SpringBoot的父pom文件,继承了很多东西,其中最重要的要数<dependency management>
。
- 继承
spring-boot-starter-parent
的<dependency management>
spring-boot-denpendencies
通过Maven的<dependency management>
标签特性实现jar版本管理- 通过
spring-boot-denpendencies
的pom管理所有公共Starter依赖的版本 - Starter是随用随去,避免一下子继承父类所有的starter依赖
3.2 starters的原理
starters是依赖关系的整理和封装。是一套依赖坐标的整合,可以让导入应用开发的依赖坐标更方便。
有了这些Starters,你获得Spring和其整合的所有技术的一站式服务。无需配置(自动配置)、无需复制粘贴依赖坐标,一个坐标即可完成所有入门级别操作。举例:JPA or Web开发,只需要导入 spring-boot-starter-data-jpa
或 spring-boot-starter-web
。
1 | <dependency> |
每个Starter包含了当前功能下的许多必备依赖坐标,这些依赖坐标是项目开发,上线和运行必须的。同时这些依赖也支持依赖传递。举例: spring-boot-starter-web
包含了所有web开发必须的依赖坐标
starter的命名规范:官方的starter写法 spring-boot-starter-*
,非官方的starter写法thirdpartyproject-spring-boot-starter
非常多,一下只列举部分:
3.3 自动配置(AutoConfiguration)原理
- 每个Starter基本都会有自动配置AutoConfiguration
- AutoConfiguration的jar包定义了约定的默认配置信息。
- SpringBoot采用约定大于配置设计思想。
自动配置的值在哪里?
自动配置的值怎么才能生效?
查看启动类注解@SpringBootApplication
追踪步骤:
- @EnableAutoConfiguration
- @Import({AutoConfigurationImportSelector.class})
- spring.factories
- org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
- @EnableConfigurationProperties({ServerProperties.class})
- private final ServerProperties.Tomcat tomcat = new ServerProperties.Tomcat();
有了自动配置,那么基本全部采用默认配置。当然也可以更改默认配置。
4. SpringBoot的配置文件
我们知道SpringBoot是约定大于配置的,所以很多配置都有默认值。如果想修改默认配置,可以使用application.properties或application.yml(application.yaml)自定义配置。SpringBoot默认从Resource目录加载自定义配置文件。application.properties是键值对类型。application.yml是SpringBoot中一种新的配置文件方式。
例如:
application.properties文件
1 | 8888 = |
application.yml文件
1 | server: |
4.1 application.yml配置文件
YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式。可以直观被电脑识别的格式。容易阅读,容易与脚本语言交互。可以支持各种编程语言(C/C++、Ruby、Python、Java、Perl、C#、PHP)。以数据为核心,比XML更简洁。扩展名为.yml或.yaml
4.1.1 配置普通数据语法
key: value
1 | # yaml |
注意:Value之前有一个空格
4.1.2 配置对象数据
1 | person: |
注意:yml语法中,相同缩进代表同一个级别
4.1.3 配置集合、数组数据语法
1 | # 数组 |
注意:value与-之间存在一个空格
4.2 SpringBoot配置信息的查询
修改配置时,配置项目查询方式
第一种:自动配置jar包中的META-INF文件夹下,spring-configuration-metadata.json文件中
第二种:官方配置文件地址
4.3 配置文件属性注入Bean
4.3.1 使用注解@Value映射
@value注解将配置文件的值映射到Spring管理的Bean属性值
1 | /** |
4.3.2 使用注解@ConfigurationProperties映射
通过注解@ConfigurationProperties(prefix=’’配置文件中的key的前缀”)可以将配置文件中的配置自动与实体进行映射。
使用@ConfigurationProperties方式必须提供Setter方法,使用@Value注解不需要Setter方法。
application.yml
1 | person: |
1 | "person") (prefix = |
5. SpringBoot集成一切
5.1 集成 Spring Data JPA
Spring Data是一个用于简化数据访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷。Spring Data JPA 是其中之一。
Spring Data JPA 是Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!
目标:使用SpringBoot整合SpringDataJPA,完成数据的增删改查基本功能。
5.1.1 实现步骤
- 创建SpringBoot工程
- 勾选依赖坐标
- 配置:数据库连接、jpa相关
- 创建User表、创建实体User配置实体
- 编写UserRepository
- 编写Controller、Service
- 访问测试
5.1.2 实现过程
5.1.2.1 创建SpringBoot工程
5.1.2.2 勾选依赖坐标
5.1.2.3 配置:数据库连接、jpa相关
1 | 8090 = |
5.1.2.4 创建表,创建实体配置实体
1 | -- ---------------------------- |
1 | //实体类注解 |
5.1.2.5 编写UserRepository
泛型需要实体类,和实体类的ID
1 | /** |
5.1.2.6 编写Controller、Service
1 | /** |
1 | /** |
5.2 集成MyBatis
使用SpringBoot整合MyBatis,完成查询所有功能
5.2.1 实现步骤
- 创建SpringBoot工程
- 勾选依赖坐标
- 数据库连接信息
- 创建User表、创建实体User
- 编写三层架构:Mapper、Service、controller,编写查询所有的方法
- 配置Mapper映射文件
- 在application.properties中添加MyBatis配置,扫描mapper.xml和mapper
- 访问测试地址http://localhost:8080/queryUsers
5.2.2 实现过程
5.2.2.1 创建SpringBoot工程
5.2.2.2 勾选依赖坐标
5.2.2.3 数据库连接信息
1 | 8090 = |
数据库连接地址后加 ?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
,不然会报错
5.2.2.4 创建User表、实体User
1 | -- ---------------------------- |
1 | public class User { |
5.2.2.5 编写Mapper
使用@Mapper标记该类是一个Mapper接口,可以被SpringBoot自动扫描
1 |
|
5.2.2.6 配置Mapper映射文件
在src/main/resources/mapper路径下加入UserMapper.xml配置文件
1 |
|
5.2.2.7 添加MyBatis信息
1 | # 扫描实体 |
5.2.2.8 编写Controller
1 |
|
5.3 集成Spring Data Redis
SpringBoot整合了Redis之后,做用户数据查询缓存
5.3.1 实现步骤
- 添加Redis的Starter
- 在application.properties中配置redis端口、地址
- 注入RedisTemplate操作Redis缓存查询所有用户数据
- 测试缓存
5.3.2 实现过程
5.3.2.1 添加Redis起步依赖
1 | <!--spring data redis 依赖--> |
5.3.2.2 配置Redis连接信息
1 | # Redis 配置(不填也是可以的) |
5.3.2.3 注入RedisTemplate测试Redis操作
1 |
|
5.4 集成定时器
使用SpringBoot开发定时器,每隔5秒输出一个当前时间。
实现步骤:
5.4.1 开启定时器注解
1 | /** |
5.4.2 配置定时器方法
1 | /** |
5.5 扩展了解
- 集成 MongoDB
- 集成 ElasticSearch
- 集成 Memcached
- 集成邮件服务:普通邮件、模板邮件、验证码、带Html的邮件
- 集成RabbitMQ消息中间件
- 集成Freemarker或者Thymeleaf
- …………….
6. SpringBoot如何代码测试
SpringBoot集成JUnit测试功能,进行查询用户接口测试。
实现步骤:
6.1 添加Junit起步依赖(默认就有)
1 | <!--spring boot测试依赖--> |
6.2 编写测试类
SpringRunner继承SpringJUnit4ClassRunner,使用哪一个Spring提供的测试引擎都可以。指定运行测试的引擎
@SpringBootTest的属性值指的是引导类的字节码对象
1 | .class) (SpringRunner |
7. Spring Boot 如何打包部署
启动方式有两种,一种是打成jar直接执行,另一种是打包成war包放到Tomcat服务下,启动Tomcat。
7.1 打成Jar包部署
执行maven打包命令或者使用IDEA的Maven工具打包
1 | ## 移动至项目根目录,与pom.xml同级 |
需要注意项目pom.xml文件中的打包类型
1 | <packaging>jar</packaging> |
启动命令:启动之前先检查自己的pom.xml文件中是否有springboot的maven插件
1 | java -jar target/springboot_demo.jar |
启动命令的时候配置jvm参数也是可以的。然后查看一下Java的参数配置结果
1 | java -Xmx80m -Xms20m --server.port=8090 -jar target/springboot_demo.jar |
7.2 打成war包部署
执行maven打包命令或者使用IDEA的Maven工具打包,需要修改pom.xml文件中的打包类型。
1 | <packaging>war</packaging> |
注册启动类:
创建 ServletInitializer.java,继承 SpringBootServletInitializer ,覆盖 configure(),把启动类Application 注册进去。外部 Web 应用服务器构建 Web Application Context 的时候,会把启动类添加进去。
1 | //web.xml |
然后执行打包操作。同6.1 小节打包是一样的
- 拷贝到Tomcat的webapp下,启动Tomcat访问即可
- 因为访问地址不再是根目录了,所有路径中需要加入项目名称:http://localhost:8080/springboot_demo/hello
-------------本文结束感谢您的阅读-------------
本文标题: SpringBoot
本文链接: https://wgy1993.gitee.io/archives/6f2612a2.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
