序言
本系列除了SpringData部分, 其余 部分全部是基于SpringBoot 2.0以上版本, 更新则更强, 尽量不与主流脱节. 我们不是时代的弄潮儿, 我们只是先进技术的追随者~~~SpringData部分
Spring全家桶之SpringData——预科阶段 讲述了SpringData 所涉及的技术的简介 Hibernate JPA 标准 Hibernate JPA SpringData SpringData JPA SpringData Redis Spring全家桶之SpringData——Spring 整合Hibernate与Hibernate Jpa Hibernate是一种ORM框架,ORM全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象! 在这里, 我们搭建了一个Hibernate简单环境 ,用来测试相关的语法 ,通过hibernate完成crud操作.并通过Hibernate实现 HQL查询(Hibernate Query Language) , SQL查询 ,QBC查询(QBC: Query By Criteria )。 然后 , 又开始Spring整合Hibernate JPA的学习, 通过Hibernate JPA完成crud操作.并通过Hibernate Jpa实现 HQL查询(Hibernate Query Language) , SQL查询 ,QBC查询(QBC: Query By Criteria )。 Spring全家桶之SpringData——Spring Data JPA Spring Data JPA,即SpringData的Java持久层API , 是spring data 项目下的一个模块。 提供了一套基于JPA标准操作数据库的简化方案。 底层默认的是依赖Hibernate JPA 来实现的。 Spring Data JPA 的技术特点: 我们只需要定义接口并继承Spring Data JPA 中所提供的接口就可以了。 不需要编写接口实现类。 即可实现对数据库的操作。 在这里, 介绍他的相关注解以及持久层 ,持久化, 持久化的相关操作等关键术语 ,然后进行实战应用 : 搭建Spring Data JPA项目 .分别继承了以下五个接口以及用户自定义Repository接口的实现。一对一的关联操作
一对多的关联操作
多对多的关联操作
SpringBoot部分
Spring全家桶之SpringBoot——初级阶段 Spring Boot 设计目的是用来简化新Spring 应用的初始搭建以及开发过程。 他拥有嵌入的Tomcat,无需部署WAR 文件 , Spring Boot 并不是对Spring 功能上的增强,而是提供了一种快速使用Spring 的方式。 可以通过SpringBoot官网 快速构建SpringBoot项目, 自动为你生成启动类以及相关文件等。 在SpringBoot的初级阶段 ,学习了SpringBoot的启动器 以及编写了HelloWorld的入门案例 ; 再学习了SpringBoot整合Web的开发, 包括整合Servlet ,Filter ,Listener ,静态资源以及实现文件上传功能 ; 然后学习了 SpringBoot整合视图层的技术, 包括整合Jsp技术,Thymeleaf技术,以及freeMarker技术; 最后学习了SpringBoot整合Mybatis技术。 Spring全家桶之SpringBoot——高级阶段 Spring Boot是一个简化Spring开发的框架。 用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。 我们在使用Spring Boot时只需要配置相应版本的SpringBoot父项目就可以用所有的Spring组件,简单的说,SpringBoot就是整合了很多优秀的框架,不用我们自己手动的去写一堆 xml 配置然后进行配置。 从本质上来说,SpringBoot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。 在SpringBoot的高级阶段, 我们首先学习了SpringBoot的数据校验,即对前端 form表单的校验, 包括对用户名 ,密码 ,年龄 ,邮箱等进行校验。 再学习了SpringBoot的异常处理与单元测试 , 捕获指定异常 ,在自定义的页面现实错误信息。 然后学习了SpringBoot的热部署 , 令我们不需要手动重启项目即可使修改的代码生效。 然后学习了SpringBoot整合SpringData JPA五种接口的使用以及实体关系映射操作。SpringCloud部分
Spring全家桶之SpringCloud——初级阶段 Spring Cloud是一系列框架的有序集合。 它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装 , 屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。 在SpringBoot的初级阶段, 我们首先学习了四种架构风格 ,MVC, RPC, SOA, 微服务架构以及微服务的设计原则,特别是AKF拆分原则的学习, 再学习了SpringCloud的简介 ,版本号以及与子项目兼容介绍 ,与Dubbo的性能对比。 然后进入了SpringBoot实战(做小项目), 官网快速构建项目, 修改pom坐标和全局配置文件 ,异常处理以及健康监控。 再然后进入了RabbitMQ实战, 搭建环境并编写案例源码, 三种交换器, 实现服务松耦合以及消息的处理。 最后学习了Eureka注册中心, 搭建Eureka服务注册中心以及注册中心集群, 并发布到指定虚拟机或服务器中。 并且对Eureka进行优化, 优雅停服的实现, 讲述Eureka的安全认证。 Spring全家桶之SpringCloud——高级阶段(上) 在SpringCloud高级阶段的第一部分, 我们首先学习了负载均衡Ribbon , 服务之间的通讯方式有两种 :一种是负载均衡 Ribbon ,一种是声明式调用 Feign Ribbon 是一个基于 Http 和 TCP 的客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。 它不像 spring cloud 服务注册中心、配置中心、API 网关那样独立部署, 但是它几乎存在于每个 spring cloud 微服务中。 包括 feign 提供的声明式服务调用也是基于该 Ribbon 实现的。 ribbon 默认提供很多种负载均衡算法, 例如: 轮询、随机 等等。 甚至包含自定义的负载均衡算法。 然后学习了声明式调用 Feign ,Spring Cloud 的声明式调用, 可以做到使用 HTTP 请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。 它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的 Http Client 构造请求再解析返回数据。 它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。 最后学习了服务容错保护Hystrix ,用来微服务项目因为软件或硬件原因出现的雪崩效应, 它提供了五种解决方式: 降级, 隔离, 熔断, 请求缓存, 请求合并. 我们将整合这五个方案结合案例源码进行学习。 Spring全家桶之SpringCloud——高级阶段(中) 在SpringCloud高级阶段的第二部分, 我们首先学习了微服务的常用的六种设计模式, 并进行案例模拟。 再学习了服务网关Zuul ,API网关是一个反向路由: 屏蔽内部细节,为调用者提供统一入口,接收所有调用者请求,通过路由机制转发到服务实例。 API网关是一组“过滤器”集合: 可以实现一系列与核心业务无关的横切面功能,如安全认证、限流熔断、日志监控。 我们进行了案例模拟, 然后总结了常用的路由规则 ,自定义网关过滤器(权限验证与异常处理), 网关容错, 在高并发情况下, 实现限流打到自我保护, 以及超时问题解决。 然后学习了分布式服务配置中心, 配置中心入门案例(配置中心客户端和服务端的搭建), "GitHub的中文版-码云"的使用方式, 配置中心配置文件的命名与访问规则, bootstrap与application的区别。 最后学习了对配置文件的安全与加密, 使用对称加密和非对称加密算法 ,实现敏感数据加密( 例如数据库的用户名和密码 )以及配置中心的用户安全认证的实现, 在一定程度上保护了配置文件。 Spring全家桶之SpringCloud——高级阶段(下) 在SpringCloud高级阶段的第二部分, 我们首先学习了消息总线Bus, SpringCloud bus集成了市面上常用的消息代理 ,(RabbitMQ ,Kafka) ,连接服务中的所有节点。 当有数据有变更时 ,可以通过代理广播通知微服务及时变更数据 ,例如微服务的配置更新。 它的出现解决了微服务数据变更 , 及时同步问题 .进行了案例模拟.实现了采用bus 实现自动刷新配置信息Sever( 服务端)与Client ( 客户端)的刷新以及局部刷新的实现。 然后习了消息驱动Stream, Spring Cloud Stream是一个构建消息驱动微服务应用的框架。 它基于Spring Boot构建独立的、生产级的Spring应用,并使用Spring Integration为消息代理提供链接。 你可以添加@EnableBinding注解到你的应用中来快速连接到消息代理,添加@StreamListener注解到一个方法上,这个方法会接收到Stream处理事件。 进行了案例模拟, 并实现了Stream消息的分组与分区。 最后学习了分布式服务跟踪Sleuth, 由于单体架构变为微服务架构, 并且系统规模越来越大, 各个服务之间的关系变得越来越复杂, 这就是分布式服务跟踪技术Sleuth出现的背景, 它能够为我们提供链路追踪,性能分析, 数据分析和优化链路, 并为我们提供可视化界面. 通过将项目和ELK进行整合 ,方便我们跟踪分析日志。SpringCloud技术拓展部分
Spring全家桶之SpringSession 在这里, 我们首先学习了HttpSession, 他是 JavaWeb 服务端提供的用来建立与客户端会话状态的对象。 介绍了SpringSession以及使用, 安装redis单机版的教程, 共享简单数据以及自定义对象,设计Session的失效时间以及更换其序列化器。 然后学习了Spring Session MongoDB, 他与HttpSession,不同之处是它是用MongoDB作为Session的缓存场所, 而后者使用的Redis作为缓存数据存放的场所. 但他们都是用来解决Session 共享问题, 讲解了MongoDB单机版的安装, 共享简单数据以及自定义对象,设计Session的失效时间以及更换其序列化器。 Spring全家桶之SpringSecurity SpringSecurity 是一个高度自定义的安全框架。 利用 SpringIoC/DI和 AOP 功能,为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作。 正如你可能知道的两个应用程序的两个主要区域是“认证”和“授权”(或者访问控制)。 这两点也是 SpringSecurity 重要核心功能。 “认证”,是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统),通俗点说就是系统认为用户是否能登录。 “授权”指确定一个主体是否允许在你的应用程序执行一个动作的过程。 通俗点讲就是系统判断用户是否有权限去做某些事情。 在这里,我们首先进行了案例模拟, 讲解了UserDetailsService 的作用,自定义登陆逻辑与登陆页面。 然后学习了认证过程中的其他常用配置,访问控制url的配置, 内置方法的介绍以及角色权限的判断。 再然后学习自定义403(权限不足)页面的处理, 常见状态码介绍, 基于表达式和注解的访问控制。 最后学习了RememberMe(免登陆)功能的实现, 然后在学习Spring Security 中的CSRF后华丽落幕。 Spring全家桶之分布式事务处理技术之LCN 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 在设计LCN框架之初的1.0 ~ 2.0 的版本时,框架设计的步骤是如下的,各取其首字母得来的LCN 命名。 LCN: 锁定事务单元(lock)、确认事务模块状态(confirm)、通知事务(notify) , 他的宗旨 : LCN 并不生产事务,LCN 只是本地事务的协调工。 在这里我们通过案例模拟的形式, 学习了使用LCN 实现分布式事务处理服务端和服务端的配置并实现相关功能。 以及有待解决的功能——在服务网关中配置LCN。 这里需要注意的是本博文介绍的分布式事务处理是基于SpringCloud 的环境下实现的。结语
希望能够帮到大家, 同时也希望通过总结提升, 能够帮助自己建立起一套属于自己的Spring知识体系。