Minio—快速整理
MinIO 介绍 Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。 官方网站 https://min.io/product/enterpriseovervie…
Redis—Redisson客户端
Redis 是用单线程来处理多个客户端的访问,因此作为 Redis 的开发和运维人员需要了解 Redis 服务端和客户端的通信协议,以及主流编程语言的 Redis 客户端使用方法,同时还需要了解客户端…
Java—P6Spy数据库SQL记录
P6Spy是一个框架,它可以无缝地拦截和记录数据库活动,而无需更改现有应用程序的代码。一般我们使用的比较多的是使用p6spy打印我们最后执行的sql语句。常用的数据框架也会自带打印sql的功能,比如j…
Spring—WebFlux请求处理流程
在了解SpringMvc的请求流程源码之后,理解WebFlux就容易的多,毕竟WebFlux处理流程是模仿Servlet另起炉灶的。 MVC的具体参考以前的文章 http://www.enmalvi.…
SpringBoot—扩展接口
Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很…
Redis—注解接口限流
Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。 在项目中因为某个接口疯狂被请求导致线程阻塞,所以要对单个接口加上阻塞。 准备工作 添加POM依赖 <parent…
SpringBoot—数据库读写分离
在集群数据库里,数据库的读写分离也是常见的优化手段。 读写分离有很多种方式可以来实现,比如用sharding-jdbc等框架来实现,不过这里用最简单的方式。 方案使用了AbstractRoutingD…
Spring—WebClient使用
WebClient是Spring5引入的,基于响应式编程实现的HTTP调用客户端。Spring官方推荐使用WebClient替代RestTemplate完成HTTP调用。因为WebClient是基于R…
SpringCloud—LoadBalanced负载均衡
目前从2018年开始SpringCloud中的Netflix项目逐渐进入维护阶段了。很多的组件Spring官方都有相应的组件来代替,阻断式升级(不向下兼容),比如负载均衡器,之前用的Ribbon使用S…
Spring—ApplicationEvent事件驱动机制
说到事件驱动,一直就有一个不解的疑问:它和我们老生长谈的一些概念比如:【观察者模式】【发布订阅模式】【消息队列MQ】【消息驱动】【EventSourcing】等等是一回事吗? JDK中的事件驱动机制 …
SpringMVC—Web九大组件之HandlerExceptionResolver异常处理器
Java异常体系简介 Java相较于其它大多数语言提供了一套非常完善的异常体系Throwable:分为Error和Exception两大分支: Error:错误,对于所有的编译时期的错误以及系统错误都…
SpringMVC—ModelAndViewContainer、ModelMap、Model、ModelAndView、@ModelAttribute、@SessionAttribute等
对于这几个类,总是经常的分不清楚他们的作用和关系,比较混乱,这次就好好整理一下对这几个类的内容。 ModelAndViewContainer 我把这个类放在首位,是因为相较而言它的逻辑性稍强一点,并且…
SpringMVC—Web九大组件之ViewResolver
我们知道,当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理。接着它会根据请求的URL经过HandlerMapping处理,匹配上…
SpringMVC—ContentNegotiation内容协商机制
在使用Spring Boot时是否对这样一个现象"诧异"过:同一个接口(同一个URL)在接口报错情况下,若你用rest访问,它返回给你的是一个json串;但若你用浏览器访问,它返回给你的是一段html…
SpringMVC—HandlerMethodArgumentResolver参数处理器
在享受Spring MVC带给你便捷的时候,你是否曾经这样疑问过:Controller的handler方法参数能够自动完成参数封装(有时即使没有@PathVariable、@RequestParam、…
SpringMVC—HandlerAdapter—HttpMessageConverter消息转换器
本文介绍Spring MVC中的一个极其重要的组件:HttpMessageConverter消息转换器。 有一副非常著名的图,来形容Spring MVC对一个请求的处理: 从图中可见HttpMessa…
SpringMVC—HandlerMethodReturnValueHandler返回值处理器
在前面的讲过HandlerAdapter的内容,里面有关于返回值处理器的初始化,还有之前的统一处理返回结果也是这个接口。 http://www.enmalvi.com/2022/10/02/sprin…
SpringMVC—Web九大组件之HandlerAdapter
如果说理解了HandlerMapping相当于掌握了Spring MVC的1/3,那么若你继续理解了HandlerAdapter(以及它的相关组件),那几乎可以说你就理解了它剩下的2/3了。 Hand…
Spring—AutowireCapableBeanFactory依赖注入
不可否认的是,把Bean交给Spring管理,确实极其的方便,优点一大把,并且还几乎没有啥缺点。这也就是为何咱们一言不合就把Bean扔给Spring的原因。(在Spring的技术栈里这么做,完全没有问…
SpringMVC—Web九大组件之HandlerMapping
之前已经大概介绍过web九大组件,本文将聚焦于Spring MVC中最重要的一个组件:HandlerMapping展开讨论 在最早之前也是学过HandlerMapping的,不过那时候是粗浅学习 ht…
SpringBoot—统一API接口响应格式
实现统一 API 接口响应格式的方式有很多的,比如之前的ResponseBodyAdvice 和 RequestBodyAdvice,比如拦截器等,但是这里使用的不是这些而是从返回处理器中去自定义,H…
SpringBoot—自定义参数解析器
在一个 Web 请求中,参数我们无非就是放在地址栏或者请求体中,个别请求可能放在请求头中。 放在地址栏中,我们可以通过如下方式获取参数: String name = request.getParame…
SpringMVC—工作机制和请求生命周期
在学习后面的webFlux时,还需要回过来了解一下MVC,不然会有很多的疑惑,因为MVC中也是存在着类似于响应式的方式。 既然要从头看看MVC,那么就看最原始的地方开始,了解一下MVC的整个执行过程。…
SpringMVC—PathPattern路径模式
Spring5 也已经出来好久了,里边有一些新玩法也需要我们去慢慢揭开面纱,最近在看 SpringMVC 源码的时候,就看到这样一段代码: /** * Initialize the path to u…
Spring—异步Servlet
我们日常使用的 SpringMVC,基本上都不是异步 Servlet,而学习 WebFlux,异步 Servlet 是基础。 什么是异步 Servlet 先来说说什么是非异步 Servlet。 在 S…
Spring—异步Http
前置概念 虽然现在看看Spring的异步模式看起来有点老,毕竟现在都Spring5的时代了,甚至将来肯定是webflux的时代,但是不可否认的是现在Servlet 仍然是主流,目前都是Servlet3…
Spring—AOP切面(构建)
AOP切面 到本节我们将要从 IOC 的实现,转入到关于 AOP(Aspect Oriented Programming) 内容的开发。在软件行业,AOP 意为:面向切面编程,通过预编译的方式和运行期…
Spring—IOC容器(构建)
Bean容器创建 Spring Bean 容器是什么? Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种用于承载对象的容器,你可以配置你的每个 Bean 对象是如何被创建的,这些…
SpringCloud—项目改造为Spring-Cloud-Kubernetes项目
K8S Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,…
SpringBoot—启动时执行
我们经常需要在容器启动的时候做一些钩子动作,比如注册消息消费者,监听配置等,今天就总结下SpringBoot留给开发者的7个启动扩展点。 容器刷新完成扩展点 1、监听容器刷新完成扩展点Applicat…