# Springboot2 实战权威指南 基础篇
## 更新历史
~~~
24万+文字
200+章节
~~~
* 2017.12, 本书第一版《Spring Boot 2精髓》,由电子出版社出版
* 2019.06, 本书第二版,拆成俩部分,基础篇和分布式篇,基础篇通过看云发布
* 2019.0702,微调目录结构
* 2019.0709 第二章scope文档和例子对不上
* 2019.0715 第三章目录缺少一节,标点符号调整
* 2019.0803 添加plus系统功能权限和数据权限开发原理
* 2019.0813 修改MyBatis一章内容,完善了MyBatis简单使用。SpringBoot-Plus增加数据权限和配置介绍
* 2020.0607 SpringBoot 2.3最新版,并细微修订部分内容,如SpringBoot为什么不采用SLF4J
## 写作特色
本书是《SpringBoot 2.0 精髓》(电子工业出版社出版,定价79元)的第二版。根据第一版的反馈,有如下改进
* 书中所有内容更新到最新版本,由于本书发型采用电子版,读者随时可以看到最新内容,可以通过更新历史查看是否有更新内容。Spring Boot的书很多,但大多昙花一现,本书决心打造为Spring Boot应用经典书籍
* **杜绝纯理论,杜绝贴源码行为**,[例子](https://gitee.com/xiandafu/springboot2-howto-example)紧密结合业务实战,兼顾教学和实战。
* **杜绝只讲Spring Boot,不讲Spring 生态的行为**,立刻学习,立刻使用
* 提供了较为全面的基础知识,本书可以作为一本参考书供开发中使用,有些知识限于篇幅没有深度讲解,但可以作为解决你的系统问题的一个思路
* 介绍了[SpringBoot-plus](https://gitee.com/xiandafu/springboot-plus) 开发平台,一个正真的开发平台内核系统,可以作为每个软件公司后台项目脚手架
* 增加了选型分析,Springboot 继承了很多框架,每章涉及到多个框架选型会做出一定个人分析,比如为什么SpringBoot 会推荐HikariCP,推荐Jackson。
* 更多介绍了微服务和分布式介绍
* 更多介绍Redis, 考虑到Redis 应用更加普遍,同时也介绍了JVM缓存caffeine,caffeine+redis,一对互联网高并发应用的黄金搭档
* 对一些Spring基础知识也较第一版本做了大幅度增强,满足高级开发者的使用需求。比如AOP,事务管理。本书改动幅度大约20%,随着用户反馈,会逐渐调整
* 由于出版的是电子版,所以有更多个人技术上的见解可以写在书里,能帮助更多初学者选型技术,以及知道如何选型技术
本书并不是一本Spring原理书或者SpringBoot 2的源码解析书,本书紧贴SpringBoot 2实战和定制开发,如果你是想立即使用SpringBoot2,只需本书一本就够了,而不像其他Spring Boot书要分好几本买,看数千页的资料才能编写Spring Boot 实战项目。《Springboot 2 实战权威指南》 是最好的选择
本书聚焦Spring Boot技术和相关生态,分布式技术。如果你想了解Spring Cloud,你需要一本专业还有更厚的书
本书适合那些Java初学者,或者从其他语言转向Java,也适合了解Spring,Struts等web框架,想改用Spring Boot的架构师,如果你已经对Spring Boot2 有所了解,本书也可以帮你拓宽知识面,了解Spring Boot2的原理和其依赖库的选型依据
## 免费阅读
第一章提供免费阅读
最后一章12.1,12.2,12.3,12.4.1 章节提供免费阅读
## 示例工程
本书的所有例子都直接访问[码云](https://gitee.com/xiandafu/springboot2-howto-example)或者ibeetl.com网站获取书中代码,网站还提供了关于Spring Boot 更深入的例子,并且包括俩个实用的例子,一个是采用Spring Boot 构建的轻量级[BBS](https://gitee.com/xiandafu/beetl-bbs),还有一个企业应用脚手架的完整例子[Spring Boot Plus](https://gitee.com/xiandafu/springboot-plus) ,这俩个例子被国内很多中小企业再次定制使用。本书会介绍Spring Boot Plus项目
欢迎与作者互动,完善本书和示例
## 作者介绍
李家智,网名闲大赋,是国内Beetl,BeetlSQL等基础软件开源作者,工作了19年Java编程,至今还在一线开发。经常发表博客,技术见解。
现定居北京,曾在一流的电信厂商,外企干过,也在一流的互联网电商干过,熟悉JavaEE,熟悉Spring,熟悉分布式,最后一家是京东交易中台架构组,负责分布式系统架构升级和优化
有任何SpringBoot和周边生态技术的问题,欢迎加入QQ群252010126 讨论.
欢迎关注我的公众号
![gzh](https://img.kancloud.cn/11/07/1107c49aa99164fadeac77e41e5c60f1_258x258.jpg)
## 基础篇内容介绍
上半部分,介绍Spring Boot基础技术 ,https://www.kancloud.cn/xiandafu/springboot2-in-practice
* 第一章,如果不知道Java开发框架历史,很难理解Spring Boot。本书第一章 介绍Java EE,然后指出其缺点,引入了流行的Spring,同时也说明Spring这么多年发展后的一些缺点,从而介绍Spring Boot,并以俩个简要例子作为说明。
* 第二章:对Spring Boot应用的开发环境做了说明,包括Java开发环境安装和配置,包含了Eclipse和Idea,以及Maven安装和配置,设置国内仓库镜像。
* 第三章: 详细介绍MVC技术,重点介绍URL映射到Contorller,以及映射到Controller 方法的参数,附件上传,参数类型转化,参数验证。
* 第四章:对视图层介绍,分为俩部分,一部分是Jackson,性能最好,功能最全的Json序列化工具,Spring Boot不仅仅将Jackson作为MVC中的JSON默认和推荐工具,也是Spring Boot分布式技术中常采用的JSON序列化技术。第二部分 介绍了笔者的开源技术Beetl后端模板引擎,作为国内最为流行的模板引擎之一,也是当今世界性能最好,功能最全的文本处理引擎。广泛应用到国内各大公司。
* 第五章: 介绍了以面向对象为中心的数据库访问工具Spring Data JPA。本章由易到难,先从Spring Data提供的功能入手介绍如何完成数据库简单的增删改查功能,然后引入JPA来解决应用中不可避免的复杂SQL查询。
* 第六章 介绍了以SQL为中心的数据库访问工具,主要包含两款,一个是流行多年通过XML来管理SQL的Mybatis,以及辅助工具MyBatis-Plus。另外一个是笔者的Dao工具,SQL在markdown文件中管理,内置增删改查,无需辅助插件。以SQL为中心的数据库访问工具, 适合那些更喜欢SQL方式访问数据库的开发者。
* 第七章:介绍了MyBatis-Plus系统集成,本章不会深入MyBatis使用,因为那需要一本书才能说明白,本节内容由MyBatis-Plus作者提供。
* 第八章:介绍Spring Boot高级特性,如常用Spring Boot的配置,日志配置,应用配置的读取,Spring Boot自动装配技术,Spring Boot Stater实现。
* 第九章: 介绍了如何部署Spring Boot应用,包括可执行jar,以及通过war部署到应用服务器上。应用经常面对多个环境,如开发,测试,还有准线上,线上,以及多个Demo环境,Spring Boot提供Profile来实现多环境部署
* 第十章:介绍了单元测试概念,以及SpringBoot下的单元测试支持,包括MVC单元测试,Mock测试。
* 第十一章:考虑到Spring Boot 以Spring技术为从基础,本章会再次深入介绍IOC,AOP和事务处理
* 第十二章:介绍[Spring Boot2 Plus](https://gitee.com/xiandafu/springboot-plus)项目安装和核心模型,代码生成功能,权限设计。
## 分布式篇介绍
介绍Spring Boot与分布式相关技术 https://www.kancloud.cn/xiandafu/springboot2inpractice_distributed
* 第十三章: 分布式和微服务概念。Spring Boot并不是一个微服务架构,但是一个微服务体系中中做的最好的单体系统,本书介绍分布式和微服务概念,挑战和缺陷。
* 第十四章: 介绍RESTFul风格的架构,然后介绍SpringBoot如何集成以提供REST服务,使用RestTemplate调用REST服务。本章最后也重点介绍了Swagger3.0技术,以方便REST的接口的交流,开发和测试。
* 第十五章:介绍了Redis服务器的安装和使用,Redis常用数据结构和操作命令。然后介绍Spring Boot如何集成Redis,介绍使用RedisTemplate来操作Redis。章节后半部分深入介绍了RedisTemplate提供的序列化机。相对于第一版,本版会深入介绍Reids在互联网中的适用
* 第十六章,介绍了ElasticSearch的安装和使用,ElasticSearch是一个即具有全文搜索功能,也具备NOSQL的功能。本章介绍通过REST和Spring Data 俩中方式访问Elastc Search. 相对第一版,本章会深入介绍Elastic 在互联网中的应用。
* 第十七章: 介绍SpringBoot Cache功能,并重点介绍了Redis作为分布式缓存的实现。在此基础上,改进了Redis分布式缓存,通过较少的代码实现了一个具备一二级缓存的技术。
* 第十八章:Spring Boot应用水平扩展,须实现无会话状态技术,Spring Session提供了分布式会话管理,本章介绍了Nginx作为反向代理,以及Spring Session的Reids实现及其源码分析
* 第十九章: 基于前一章Spring Boot应用水平扩展技术必然带来分布式协调 要求,Zookeeper是一个广泛使用的分布式协调器。本章介绍Zookeeper的安装和使用,对领导选取,分布式锁和配置三个常用功能做了重点描述,并在SpringBoot 应用中采用curator来完成这三个功能。
* 第二十章:Spring Boot提供了内置监控功能,使得用户通过HTTP请求就能知晓服务器健康状态,如数据源是否可用,NOSQL服务是否可用,最近的HTTP访问的内容等监控信息。本章讲述了线程栈,内存,在线日志,HTTP访问,Request Mapping等常用监控功能。其中讲述通过dump线程栈和内存来解决SpringBoot应用中的一些性能故障。
* 第二十一章: 再次介绍了SpringBoot-Plus,主要包含使用到的Spring Cache和Spring Session。
## 微服务篇(敬请期待)
## 同事和开源作者的推荐:
过去几年,微服务架构在软件开发领域逐渐深入人心,Spring Boot在经历了快速演变之后,正在成为Java微服务开发的主流成熟框架。本书对Spring Boot的特性进行全方位讲解,辅以大量详实的案例,对分布式系统开发和应用提供实战指导。书中还详细介绍了作者倾注了大量心血研发的开源软件Beetl和BeetlSQL,它们易于与Spring Boot集成,并已被众多大公司采纳使用。本书对于开发人员和架构师来说,都极具参考价值。
—《Kubernetes权威指南》作者/HPE高级顾问 龚正
和家智相识多年,他是我所认识的非职业足球运动员中球商最高的,多年来他一直深耕于技术的第一线,有很丰富的技术储备,是我非常钦佩的老大哥。
我们曾经在同一家公司的同一个项目集效力,都非常喜欢踢球,都出了书,不得不说很神奇(作者注:其实和龚正也在同一个公司,同一个项目效力)。
这本书的内容非常丰富,也都是作者多年潜心钻研的积累,这本书和我的书有一些联系,将Spring Boot进行了展开的讲解,既有广度也有深度,非常值得技术人员去学习。
—《微服务那些事儿》作者纪晓峰
Spring Boot上手简单、功能丰富、易于扩展,可谓目前业界快速开发、快速生产的利器;然而,它的版本演进非常迅速,中文文档质量也是参差不齐。本书由浅入深地讲解了Spring Boot,帮助读者系统理解Spring Boot。不仅如此,本书对2.0版本带来的新特性亦有非常详尽的描述,绝对值得一读。
—《Spring Cloud与Docker微服务架构实战》作者 周立
和家智相识有五年了,最早是因为模板引擎技术结识。家智是国内顶级的模板引擎专家,也是我认识的为数不多的 Spring 技术专家,他在这两方面都曾带给我不同角度的思考与印证,让我获益匪浅。本书是家智二十年技术专研的一次厚积薄发,其中非但从作者自身的经验详细讲述了 Spring Boot框架,还引入了作者在模板引擎,ORM 以及单元测试方面上多年研发的开源作品,是 Java 程序员和架构师不可多得的参考资料
— ACTFramework 作者 罗格林
十多年前,Spring 颠覆了传统的 JavaEE 技术,迎来了 Java 企业级应用开发的春天,然而今天的 Spring Boot 却站在 Spring 巨人的肩膀上,让我们可以更高效地开发与交付。李家智是著名开源框架 Beetl 的作者,他写的《Spring Boot 2.0 精髓》一定非常精彩。
— 黄勇,特赞科技 CTO
最早熟知作者是从Beetl模板引擎开始的,当时正在寻找一个易用高效的模板引擎,Beetl几乎满足了我所有的需要。同时也对作者在开源项目上的认真与负责所敬佩。本书可以说是作者多年的心血所著,从Spring boot的前世今生到使用扩展,都做了非常全面而易懂的概括,细节上也秉承了作者的细致与认真,讲解清晰并语言干练,既适合初学者系统化学习,也适合有经验的工程师做为参考。
— 开源工具集Hutool作者 路小磊
从事web开发有些年头了,经过技术选型,spring boot走入了我们的视野,开箱即用,非常方便,也是目前很多大公司的选择之一。除了研究源码,如果有一本关于SpringBoot的指导书籍,则可以极大方便的解决开发中的问题和帮助掌握SpringBoot,提高生产效率。
家智兄的这本书正是这样不可多得的优秀资源,是家智兄多年钻研研究的技术积累,书中详细讲解了web开发的各个知识点,包含:web请求处理,ORM处理,redis缓存,MongoDB,ElasticSearch,Zookeeper,监控等方面的知识点。相信读者通过仔细阅读并掌握本书的知识点,可以极大的提高自身的web开发水平,为读者的软件开发事业助一臂之力!
— 上海秦苍(买单侠) 基础架构组架构师 刘志强
作者在Java EE体系内的多年实战经验使得本书的内容极具价值,书中清晰细致的讲解了快速构建Web应用系统的各个知识点,尤其是在后端模板引擎和ORM两个章节中作者以自己的两款成熟开源产品Beetl和BeetlSQL为切入点进行讲解,剖析角度十分新颖并且有启发性。
通过这本书可以学习到关于Spring Boot框架的核心技术,从而掌握快速构建分布式Web应用的必备知识。无论你是Spring Boot新手,还是已经使用过Spring Boot的开发者,相信都可以从这本书中受益。
— XXL-JOB系列作者 许雪里
近两年来,伴随着微服务兴起,Spring boot突然流行起来了,越来越多的公司采用这一技术,已经成为大多数Java微服务开发首选开源框架。Spring boot有非常显著的特点配置简单,易于开发,可快速部署,本书结合丰富的实例,从Spring boot的快速开发WEB应用入手,逐渐深入的到Spring boot的高级特性,最后在重点介绍分布式架构的应用,通过深入浅出的阐述,让你从单体应用到分布式,微服务都有全方位的了解,是不可多得的一本好书,当然我认为最重要的还是作者耗费心血开源项目Beetl和BeetlSQL。
—《分布式数据库架构及企业实践——基于Mycat中间件》作者,开源中间件Mycat负责人 周继锋
Spring风靡多年,Spring Boot在最近几年微服务框架浪潮下更是出尽风头,本书作者由浅入深地把Spring Boot 2.0各种特性阐述得淋漓尽致,不管你是Spring Boot新手还是老司机都值得一读。Java Web后端也好,App后台也罢,甚至独立后台应用,等等,Spring Boot都是你不可或缺的高效率工具。
移动易项目团队深深的体会就是使用了Spring Boot可以节省50%以上的代码。
— 上海亿琪软件有限公司CEO,移动易开源项目负责人,华为开发者社区专家(HDE),褚建琪
- 再版说明
- 1 前言
- 1.1 内容介绍
- 1.2 Java EE
- 1.2.1 Java EE 架构
- 1.5 如何阅读本书
- 1.6 本书第二版与第一版区别
- 1.7 本书例子
- 1.8 购买正版
- 2 Spring Boot 基础
- 2.1 检查Java环境
- 2.2 安装IDE
- 2.3.1 安装Eclipse
- 2.3.2 安装Idea
- 2.3.3 Idea和 Eclipse 区别
- 2.3 Maven安装和配置
- 2.3.1 Maven介绍
- 2.3.2 安装Maven
- 2.3.3 pom文件构成
- 2.3.4 设置Maven镜像
- 2.3.5 IDE设置Maven
- 2.4 Spring框架
- 2.4.1 Spring 历史
- 2.4.2 Spring 容器介绍
- 2.4.3 Spring 常用注解
- 2.5 Hello,Spring Boot
- 2.5.1 创建一个Maven工程
- 2.5.2 增加Web支持
- 2.5.3 hello world
- 2.5.4 使用热部署
- 2.5.5 添加Rest支持
- 2.5.6 配置HTTP监听端口
- 3 MVC框架
- 3.1 集成MVC框架
- 3.1.1 引入依赖
- 3.1.2 Web应用目录结构
- 3.1.3 Java 包名结构
- 3.2 使用Controller
- 3.3 URL 映射到方法
- 3.3.1 @RequestMapping
- 3.3.2 URL路径匹配
- 3.3.4 HTTP method匹配
- 3.3.5 consumes和 produces
- 3.3.6 params和header匹配
- 3.4 方法参数
- 3.4.1 PathVariable
- 3.4.2 Model&ModelAndView
- 3.4.3 JavaBean接收HTTP参数
- 3.4.4 @RequsestBody接收JSON
- 3.4.5 MultipartFile
- 3.4.6 @InitBinder
- 3.5 验证框架
- 3.5.1 JSR-303
- 3.5.2 MVC中使用@Validated
- 3.5.3 自定义校验
- 3.6 WebMvcConfigurer
- 3.6.1 拦截器
- 3.6.2 跨域访问
- 3.6.3 格式化
- 3.6.4 注册Controller
- 3.7 Redirect 和 Forward
- 3.8 通用错误处理
- 3.9 异步请求
- 3.10 处理静态资源
- 3.11 调用Service
- 3.11.1 申明一个Service类
- 3.11.2 事务管理
- 3.12 CURL 命令
- 4 视图技术
- 4.1 Json技术
- 4.1.1 SpringBoot中使用Jackson
- 4.1.2 配置Jackson
- 4.1.3 Jackson三种使用方式
- 4.1.4 Jackson 树遍历
- 4.1.5 对象绑定
- 4.1.6 流式操作
- 4.1.7 Jackson 注解
- 4.1.9 集合的反序列化
- 4.1.10 关于Jackson性能说明
- 4.2 Beetl模板引擎
- 4.2.1 安装Beetl
- 4.2.2 设置定界符号和占位符
- 4.2.3 自动检测模板变化
- 4.2.4 GroupTemplate
- 4.2.5 使用变量
- 4.2.6 表达式
- 4.2.7 控制语句
- 4.2.8 函数调用
- 4.2.9 格式化函数
- 4.2.10 直接调用Java
- 4.2.11 标签函数
- 4.2.12 HTML标签
- 4.2.13 安全输出
- 4.2.14 配置Beetl
- 4.2.15 布局
- 4.2.16 验证模板
- 4.2.17 脚本引擎
- 4.2.18 为什么选择Beetl
- 5 数据库访问
- 5.1 配置数据源
- 5.2 Hikari 配置选项
- 5.3 JDBC Template
- 5.3.1 查询
- 5.3.2 修改
- 5.3.3 JdbcTemplate 增强
- 5.3 Spring Data JPA 支持
- 5.3.1 创建Entity
- 5.3.2 简化Entity
- 5.3.3 Repository
- 5.3.4 CrudRepository
- 5.3.5 PagingAndSortingRepository
- 5.3.6 JpaRepository
- 5.3.7 持久化Entity
- 5.3.6 Sort
- 5.3.7 Pageable和 Page
- 5.3.8 基于方法名字查询
- 5.3.9 @Query 查询
- 5.3.10 使用JPA Query
- 5.3.11 Example 查询
- 5.3.12 一个使用JPA糟糕回忆
- 6 BeetlSQL
- 6.1 BeetlSQL 特点
- 6.2 配置BeetlSQL
- 6.3 一个例子
- 6.3.1 创建实体对象
- 6.3.2 创建Dao
- 6.3.3 编写Service
- 6.3.4 编写一个复杂的SQL
- 6.4 SQLManager
- 6.5 Mrakdown 文件
- 6.6 跨数据库
- 6.6 翻页查询
- 6.7 实体对象和多表结果集
- 6.8 直接使用SQL
- 6.9 Query 类
- 6.10 代码生成
- 6.11 BeetlSQL函数
- 6.11 一些重要注解
- 6.11.1 @Table
- 6.11.2 @Version
- 6.11.3 @SqlResource
- 6.11.4 @SqlProvider
- 6.11.5 自定义注解
- 6.12 重要配置事项
- 6.13 扩展BeetlSQL
- 6.14 主从支持
- 6.15 最佳实践
- 7 MyBatis
- 7.1 Spring Boot 集成
- 7.2 编写Mapper文件
- 7.2.1 查询
- 7.2.2 更新语句
- 7.2.4 SQL片段
- 7.3 动态SQL
- 7.4 MyBatis-Plus集成
- 8 Spring Boot 配置
- 8.1 SpringBoot 配置
- 8.1.1 服务器配置
- 8.1.2 使用其他Web服务器
- 8.1.3 配置启动信息
- 8.1.4 配置浏览器显示ico
- 8.2 日志配置
- 8.3应用配置读取
- 8.3.1 Environment
- 8.3.2 @Value
- 8.3.3 @ConfigurationProperties
- 8.4 SpringBoot 自动装配
- 8.4.1 @Configuration和@Bean
- 8.4.2 Bean条件装配
- 8.4.3 Class 条件装配
- 8.4.4 Environment装配
- 8.4.5 其他条件装配
- 8.4.6 联合多个条件
- 8.4.7 Condition接口
- 8.4.8 制作Stater
- 8.5 Application.properties
- 8.6 其他配置
- 8.6.1 静态文件配置
- 8.6.2 热启动配置
- 8.7 HikariCP配置
- 9 部署Spring Boot 应用
- 9.1 以Jar文件运行
- 9.2 以war方式部署
- 9.3 多环境部署
- 9.4 @Profile
- 9.5 Launcher
- 10 Testing 单元测试
- 10.1 JUnit 介绍
- 10.1.1 Junit相关概念
- 10.1.2 Junit 测试
- 10.1.3 Assert
- 10.1.4 Suite
- 10.2 Spring Boot 单元测试
- 10.2.1 测试范围依赖
- 10.2.2 SpringBoot 测试脚手架
- 10.2.3 测试Service
- 10.2.4 测试MVC
- 10.2.5 完成MVC请求模拟
- 10.2.6 比较 MVC返回结果
- 10.2.7 JSON 比较
- 10.3 Mockito
- 10.3.1 模拟对象
- 10.3.2 模拟方法参数
- 10.3.3 模拟方法返回值
- 10.4 @Sql
- 11 AOP和事务
- 11.1 AOP
- 11.2 事务和Spirng 事务管理
- 11.2.1 事务处理
- 11.2.2 隔离保护
- 11.2.3 Spring Boot 事务管理
- 11.2.4 分布式事物
- 12 Spring Boot Plus 安装
- 12.1 代码工程
- 12.2 单体系统到系统拆分
- 12.3 安装
- 12.4 核心模型
- 12.4.1 Function
- 12.4.2 Menu
- 12.4.3 Role
- 12.4.4 User表
- 12.4.5 数据字典表
- 12.4.6 审计表
- 12.5 代码生成
- 12.5.1 子系统生成
- 12.5.1 配置子系统
- 12.5.2 业务代码生成
- 12.6 权限系统原理
- 12.6.1 功能权限
- 12.6.2 数据权限
- 12.6.3 加密
- 12.7 Plus的配置类