/tech-pdai-spring-demos

Spring Framework5/SpringBoot 2.5.x Demos

Primary LanguageJavaMIT LicenseMIT

持续更新中... @pdai

SpringFramework 5.x+

首先, 从Spring框架的整体架构和组成对整体框架有个认知。@pdai

  • Spring基础 - Spring和Spring框架组成
    • Spring是什么?它是怎么诞生的?有哪些主要的组件和核心功能呢? 本文通过这几个问题帮助你构筑Spring和Spring Framework的整体认知。

其次,通过案例引出Spring的核心(IoC和AOP),同时对IoC和AOP进行案例使用分析。

Spring进阶 - IoC和AOP源码分析

SpringBoot 2.5+

站在知识体系的视角,基于SpringBoot开发。@pdai

SpringBoot入门

首先,在开始SpringBoot开发时,我们了解一些技术栈背景并通过Hello World级别应用程序开始延伸出SpringBoot入门应用的开发。

  • SpringBoot入门 - SpringBoot 简介
    • 为什么有了SpringFramework还会诞生SpringBoot?简单而言,因为虽然Spring的组件代码是轻量级的,但它的配置却是重量级的;所以SpringBoot的设计策略是通过开箱即用和约定大于配置 来解决配置重的问题的。
  • SpringBoot入门 - 创建第一个Hello world工程
    • 我们了解了SpringBoot和SpringFramework的关系之后,我们可以开始创建一个Hello World级别的项目了。
  • SpringBoot入门 - 对Hello world进行MVC分层
    • 上文中我们创建一个简单的Hello Wold级别的web应用程序,但是存在一个问题,我们将所有代码都放在一个类中的, 这显然是不合理的,那么一个经典的CRUD项目如何分包呢?本文结合常见的MVC分层思路带你学习常见的包结构划分。
  • SpringBoot入门 - 添加内存数据库H2
    • 上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目,但是我们没有接入数据库;本文将在上文的基础上,增加一个H2内存数据库,并且通过Spring 提供的数据访问包JPA进行数据查询。
  • SpringBoot入门 - 定制自己的Banner
    • 我们在启动Spring Boot程序时,有SpringBoot的Banner信息,那么如何自定义成自己项目的信息呢?
  • SpringBoot入门 - 添加Logback日志
    • SpringBoot开发中如何选用日志框架呢? 出于性能等原因,Logback 目前是springboot应用日志的标配; 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式。
  • SpringBoot入门 - 配置热部署devtools工具
    • 在SpringBoot开发调试中,如果我每行代码的修改都需要重启启动再调试,可能比较费时间;SpringBoot团队针对此问题提供了spring-boot-devtools(简称devtools)插件,它试图提升开发调试的效率。
  • SpringBoot入门 - 开发中还有哪些常用注解
    • SpringBoot中常用的注解

SpringBoot接口设计和实现

接着, 站在接口设计和实现的角度,从实战开发中梳理出,关于接口开发的技术要点。

  • SpringBoot接口 - 如何统一接口封装
    • 在以SpringBoot开发Restful接口时,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息。
  • SpringBoot接口 - 如何对参数进行校验
    • 在以SpringBoot开发Restful接口时, 对于接口的查询参数后台也是要进行校验的,同时还需要给出校验的返回信息放到上文我们统一封装的结构中。那么如何优雅的进行参数的统一校验呢?
  • SpringBoot接口 - 如何参数校验国际化
    • 上文我们学习了如何对SpringBoot接口进行参数校验,但是如果需要有国际化的信息,应该如何优雅处理呢?
  • SpringBoot接口 - 如何统一异常处理
    • SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例,如何优雅的将参数校验的错误信息统一处理并封装返回呢?
  • SpringBoot接口 - 如何提供多个版本接口
    • 在以SpringBoot开发Restful接口时,由于模块,系统等业务的变化,需要对同一接口提供不同版本的参数实现(老的接口还有模块或者系统在用,不能直接改,所以需要不同版本)。如何更加优雅的实现多版本接口呢?
  • SpringBoot接口 - 如何生成接口文档
    • SpringBoot开发Restful接口,有什么API规范吗?如何快速生成API文档呢?
  • SpringBoot接口 - 如何访问外部接口
    • 在SpringBoot接口开发中,存在着本模块的代码需要访问外面模块接口或外部url链接的需求, 比如调用外部的地图API或者天气API。那么有哪些方式可以调用外部接口呢?
  • SpringBoot接口 - 如何对接口进行加密
    • 在以SpringBoot开发后台API接口时,会存在哪些接口不安全的因素呢?通常如何去解决的呢?本文主要介绍API接口有不安全的因素以及常见的保证接口安全的方式,重点实践如何对接口进行签名
  • SpringBoot接口 - 如何保证接口幂等
    • 在以SpringBoot开发Restful接口时,如何防止接口的重复提交呢? 本文主要介绍接口幂等相关的知识点,并实践常见基于Token实现接口幂等。
  • SpringBoot接口 - 如何实现接口限流之单实例
    • 在以SpringBoot开发Restful接口时,当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。在接口层如何做限流呢? 本文主要回顾限流的知识点,并实践单实例限流的一种思路。
  • SpringBoot接口 - 如何实现接口限流之分布式
    • 上文中介绍了单实例下如何在业务接口层做限流,本文主要介绍分布式场景下限流的方案,以及什么样的分布式场景下需要在业务层加限流而不是接入层; 并且结合kailing开源的ratelimiter-spring-boot-starter为例, 学习思路+代码封装+starter封装

SpringBoot集成MySQL(JPA,MyBatis,MyBatis-Plus)

接下来,我们学习SpringBoot如何集成数据库,比如MySQL数据库,常用的方式有JPA和MyBatis。

  • SpringBoot集成MySQL - 基于JPA的封装
    • 在实际开发中,最为常见的是基于数据库的CRUD封装等,比如SpringBoot集成MySQL数据库,常用的方式有JPA和MyBatis; 本文主要介绍基于JPA方式的基础封装思路。
  • SpringBoot集成MySQL - MyBatis XML方式
    • 上文介绍了用JPA方式的集成MySQL数据库,JPA方式在**以外地区开发而言基本是标配,在国内MyBatis及其延伸框架较为主流。本文主要介绍MyBatis技栈的演化以及SpringBoot集成基础的MyBatis XML实现方式的实例。
  • SpringBoot集成MySQL - MyBatis 注解方式
    • 上文主要介绍了Spring集成MyBatis访问MySQL,采用的是XML配置方式;我们知道除了XML配置方式,MyBatis还支持注解方式。本文主要介绍SpringBoot+MyBatis注解方式。
  • SpringBoot集成MySQL - MyBatis PageHelper分页
    • 前文中,我们展示了Spring Boot与MyBatis的集成,但是没有展示分页实现。本文专门介绍分页相关知识体系和基于MyBatis的物理分页PageHelper。
  • SpringBoot集成MySQL - MyBatis 多个数据源
    • 前文介绍的SpringBoot集成单个MySQL数据库的情形,那么什么场景会使用多个数据源以及什么场景会需要多个数据源的动态切换呢?本文主要介绍上述场景及SpringBoot+MyBatis实现多个数据源的方案和示例。
  • SpringBoot集成MySQL - MyBatis-Plus方式
    • MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus在国内也有很多的用户,本文主要介绍MyBatis-Plus和SpringBoot的集成。
  • SpringBoot集成MySQL - MyBatis-Plus代码自动生成
    • 本文主要介绍 MyBatis-Plus代码自动生成,以及产生此类代码生成工具的背景和此类工具的基本实现原理。
  • SpringBoot集成MySQL - MyBatis-Plus基于字段隔离的多租户
    • 本文主要介绍 MyBatis-Plus的基于字段隔离的多租户实现,以及MyBatis-Plus的基于字段的隔离方式实践和原理。

SpringBoot集成ShardingJDBC

随着数据量和业务的增长,我们还需要进行分库分表,这里主要围绕ShardingSphere中间件来实现分库分表,读写分离和多租户等。

SpringBoot集成连接池(HikariCP,Druid)

为了提高对数据库操作的性能,引出了数据库连接池,它负责分配、管理和释放数据库连接。历史舞台上出现了C3P0,DBCP,BoneCP等均已经被淘汰,目前最为常用(也是SpringBoot2标配的)是HikariCP,与此同时国内阿里Druid(定位为基于数据库连接池的监控)也有一些市场份额。

SpringBoot集成数据迁移(Liquibase,Flayway)

在实际上线的应用中,随着版本的迭代,经常会遇到需要变更数据库表和字段,必然会遇到需要对这些变更进行记录和管理,以及回滚等等;同时只有脚本化且版本可管理,才能在让数据库实现真正的DevOps(自动化执行 + 回滚等)。在这样的场景下出现了Liquibase, Flayway等数据库迁移管理工具。

  • SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移
    • Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。本文主要介绍SpringBoot与Liquibase的集成。
  • SpringBoot数据库管理 - 用flyway对数据库管理和迁移
    • 上文介绍了Liquibase,以及和SpringBoot的集成。除了Liquibase之外,还有一个组件Flyway也是经常被使用到的类似的数据库版本管理中间件。本文主要介绍Flyway, 以及SpringBoot集成Flyway。

SpringBoot集成PostgreSQL

在企业级应用场景下开源数据库PostgreSQL对标的是Oracle,它的市场份额稳步攀升,并且它在自定义函数,NoSQL等方面也支持,所以PostgreSQL也是需要重点掌握的。

SpringBoot集成Redis

学习完SpringBoot和SQL数据库集成后,我们开始学习NoSQL数据库的开发和集成;最终要的是分布式的缓存库Redis,它是最为常用的key-value库。

SpringBoot集成MongoDB

SpringBoot集成ElasticSearch

SpringBoot集成Websocket

进一步,我们看下SpringBoot集成Socket

SpringBoot集成定时任务(springtask,quartz,elastic-job,xxl-job)

开发中常用的还有定时任务,我们看下SpringBoot集成定时任务

SpringBoot集成后端视图(Thymeleaf)

SpringBoot集成后端视图

SpringBoot集成监控(acturator,springboot-admin)

SpringBoot集成监控

  • SpringBoot监控 - 集成acturator监控工具
    • 当SpringBoot的应用部署到生产环境中后,如何监控和管理呢?比如审计日志,监控状态,指标收集等。为了解决这个问题,SpringBoot提供了Actuator。本文主要介绍Spring Boot Actuator及实现案例。
  • SpringBoot监控 - 集成springboot admin监控工具
    • 上文中展示了SpringBoot提供了Actuator对应用进行监控和管理, 而Spring Boot Admin能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。 本文主要介绍springboot admin以及SpringBoot和springboot admin的集成。

SpringBoot进阶

SpringBoot进阶