自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 SpringCloud中RefreshScope实现原理

SpringCloud中RefreshScope实现原理 jar包版本 spring-cloud-context 2.0.0.RELEASE scope基础理论 RefreshScope是springCloud在Scope的基础上实现的,因此先了解一下Scope的实现原理。 public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory {

2021-05-06 09:53:17 1033

原创 数据库事务介绍

数据库事务介绍 背景介绍 实际上本身是想写一篇分布式事务相关的文章作为内部公司部门分享所用,但是发现如果直接从分布式事务开始介绍无法让同学门能由浅 入深的去理解分布式事务的概念,遂先介绍数据库的本地事务。注:因为本人只对Mysql有所了解,因此文章中提到的相关技术实现都是以Mysql为主。 什么是事务 通常只要是一个数据读写的系统都会涉及到事务的处理,也就是所说的对数据的ACID。 A(Atomicity)原子性:对数据的一系列操作(增、删、改),要么全部成功,要么全部失败,不存在中间状态。 C(C

2021-04-02 18:42:42 585

原创 分布式事务之XA协议

分布式事务之XA协议 业务场景 首先先来看一个物业缴费的业务场景,用户收到缴费单之后进行缴费,分为三步,第一步扣减用户余额,第二步修改订单状态未已缴费,第三步增加物业管理金额。现在我们假设用户余额,订单以及物业管理金额分别在三个不同的数据库中,并且假定在同一个服务中(即单服务多数据源场景,注意与多服务多数据源做区分,区别在于是否需要全局的TM,文章后续介绍) 本地事务方案 public void pay() { ownerAccountTransation.begin(); orderTra

2021-03-21 23:13:37 1757

原创 RabbitMQ异常重启,部分消费队列不消费问题

RabbitMQ版本: RabbitMQ 3.6.8, Erlang 19.0.4 jar包版本: spring-boot-starter-amqp 2.0.4.RELEASE 问题背景: 之前线上服务曾经出现MQ重启之后,服务不消费队列消息,其具体表现为Queue没有Consumer。但是当时没有拿到日志,并且本着对RabbitMQ这类 中间件的信任,也并没有去做过多的深入研究,觉得是极其偶然事件。但是今天上午线上某个服务的RabbitMQ由于不知名原因重启,导致出现同样现象。 该服务目前一共监听4个队列

2021-03-12 20:27:09 6580 1

原创 SpringSecurity实现获取当前登陆用户原理

SpringSecurity实现获取当前登陆用户原理 目前项目中未直接使用springSecurity,关于用户登陆授权都是原始开发。用户请求通过拦截器解析之后将用户id 设置到请求的header中,因此在服务中想要获取当前登陆用户必须要通过controller获取request之后获取header。 非常的不方便。回忆起之前使用过springSecurity可以在任何地方获取到当前请求登陆用户,因此好奇其实现原理。 jar包版本 spring-boot-starter-security 2.2.1.RE

2020-08-02 23:55:05 1061

原创 SpringAOP私有方法导致注入失败原理

SpringAOP私有方法导致注入失败原理 最近开发项目的过程中,项目组成员遇到一个注入失败导致空指针的问题。原因是因为对这个方法进行了SpringAOP切面拦截,且方法是private的。 最后改为public解决问题。但是对于具体导致的原因并没有掌握,于是时候查看源码终于解惑,特此记录。 jar包版本 spring-boot-starter-web 2.1.3.RELEASE spring-aop 5.1.5.RELEASE 问题代码 @RestController @RequestMappi

2020-07-22 22:10:06 7701 15

原创 一个超时功能的设计

超时功能的设计 产品需求 有一个产品需求,需要执行某个动作之后,需要生成一个超时的任务,在超时时间到了之后执行后续的动作,后续动作的执行大约耗时1秒钟。 任务允许在未到超时间删除,超时时间不超过30天。要求在现有的产品架构上实现此功能。 产品架构 分布式服务实例数量:3 缓存:redis 3.2.3 数据库:mysql 5.7 消息队列:rabbitMq 3.7.6 分布式定时任务:elastic-job 2.1.5 功能设计 方案一 首先看到这个需求,第一时间想到的就是在内存中维护一个集合,然后通

2020-07-15 23:33:53 703

原创 基于SpringBoot的Spring事务实现原理

基于SpringBoot的Spring事务实现原理 jar包版本 spring-boot-starter-web 2.1.3.RELEASE spring-aop 5.1.5.RELEASE spring-boot-starter-jdbc 2.1.3.RELEASE spring-jdbc 5.1.5.RELEASE Spring事务概述 spring事务是在spring aop切面代理以及spring jdbc的基础上构建的。因此在了解事务的实现原理之前必须对这3个架构有一定的了解 源码

2020-07-10 00:03:40 1794

原创 pagerHelper与mybatisPlus分页冲突问题分析

pagerHelper与mybatisPlus分页冲突问题分析 问题现象 在开发owner服务的时候发现,mybatisPlus分页不起作用,返回总数永远是0. //mybatisPlus分页接口 public interface IService<T> { //返回的page信息不包含total等信息,只显示一页内容 Page<T> selectPage(Page<T> page); } jar包版本 mybatis-plus 2.0.5 pagehel

2020-07-10 00:02:49 3816 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除