NOSQL
70 篇文章
nosql
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—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…
Spring—事务总结
1. 什么是事务 事务是逻辑上的一组操作,要么都执行,要么都不执行。 我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的 savePerson() 方法中就有两个原…
SpringSecurity—区分登录失败异常
当我们登录失败的时候,可能用户名写错,也可能密码写错,但是出于安全考虑,服务端一般不会明确提示是用户名写错了还是密码写错了,而只会给出一个模糊的用户名或者密码写错了。 然而对于很多程序员而言,可能并不…
SpringSecurity—两种方式 DIY 登录
一般情况下,我们在使用 Spring Security 的时候,用的是 Spring Security 自带的登录方案,配置一下登录接口,配置一下登录参数,再配置一下登录回调就能用了,这种用法可以算是…
SpringSecurity—权限管理的投票器与表决机制
当用户想访问 Spring Security 中一个受保护的资源时,用户具备一些角色,该资源的访问也需要一些角色,在比对用户具备的角色和资源需要的角色时,就会用到投票器和表决机制。 当用户想要访问某一…
SpringSecurity—从子线程获取用户登录信息
Spring Security 中想要获取登录用户信息,不能在子线程中获取,只能在当前线程中获取,其中一个重要的原因就是 SecurityContextHolder 默认将用户信息保存在 Thread…
SpringSecurity—new 出来的对象一样也可以被 Spring 容器管理
按理说自己 new 出来的对象和容器是没有关系的,但是在 Spring Security 框架中也 new 了很多对象出来,一样也可以被容器管理,那么它是怎么做到的? 有些项目,就会发现里边的动态权限…