文章 62
浏览 15135
spring的STOMP落地实践

spring的STOMP落地实践

背景 公司有个主系统 A,这个系统将来用途作为 SaaS 服务系统,设计尽可能保持纯粹,不要引入过多的中间件技术 其下有 B,C 甚至未来还有多个子系统,现在的需求是需要当子系统 B,C 开启了某个配置,需要对接 A 系统,A 系统能够提供 B,C 系统的能力赋能,当 BC 断开配置,B,C 又是个纯粹可以单独运行的系统,某个系统不共用同一套数据,拥有自己的环境和数据,当子系统开启了配置,相关接口功能需要限制,由主系统提供能力,断开配置,A.B,C 三个系统能够独立运行 功能拆分 主系统: 对主系统相关的增量和全量接口数据进行同步传输:这里有两个关键点 有许多增量接口需要进行同步传输&&传输数据的逻辑不能影响原先的业务逻辑(通过 AOP 注解) 需要找到一个类型消息队列 mq 那种形势进行数据同步,A 系统数据发生改动子系统能够感知 但是这个系统不能引入过多的中间件,最终经过调研,选择使用了 Spring 的 STOMP 和 Spring event 事件实现一种伪消息队列 子系统: 子系统相关接口限制:通过 AOP 接口限制 子系统需要接收主系统的全量和增量数据 (S....

"超越静态的境界:Spring设计哲学中的依赖注入与状态管理"

Spring 的依赖注入之谜:Spring 为何不拥抱静态字段 发表日期:2024 年 01 月 05 日 阅读时长:约 4 分钟 专栏标签:Spring 在 Spring 的世界里,每一个 bean 的成长都离不开一系列精心的培育过程。这个过程通常涵盖以下几个阶段: 反射孕育实例——通过反射机制创建 bean 实例。 属性的滋养——为 bean 填充属性,赋予其生机。 激活生命之火——初始化 bean,让其具备完整功能(可能伴随增强处理)。 谋划离别之时——注册 bean 的销毁方法,为其终结做好准备。 在这个生命周期中,“属性的滋养”阶段尤为关键,它正是在 populateBean 方法中得以实施。在这一过程中,除了通过 applyPropertyValues 方法直接填充属性外,大量的注入逻辑实际上是在 InstantiationAwareBeanPostProcessor 接口的 postProcessProperties 方法内实现的。这里对我们耳熟能详的 @Autowired 和 @Resource 注解进行了诠释。 protected void populateBean(....

多线程事务伪命题

多线程事务伪命题

背景 最近发现一个有趣的命题,多线程如何保证事务的一致性,简单的说,如何保证多线程情况下,一个线程操作入库逻辑执行失败,其他线程能感知,一起回滚,一起成功 个人看法 再此之前,我是觉得不太现实,为什么呢? 我们先从理论上去推理一下。 我们都知道事务的特性是什么? 这个不难吧?八股文必背内容之一,ACID 必须张口就来: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 那么问题又来了,你觉得如果有多线程事务,那么我们破坏了哪个特性? 多线程事务你也别想的多深奥,你就想,两个不同的用户各自发起了一个下单请求,这个请求对应的后台实现逻辑中是有事务存在的。 这不就是多线程事务吗? 这种场景下你没有想过怎么分别去控制两个用户的事务操作吧? 因为这两个操作之间就是完全隔离的,各自拿着各自的链接玩儿。 所以多个事务之间的最基本的原则是什么? 隔离性 。两个事务操作之间不应该相互干扰。 而多线程事务想要实现的是 A 线程异常了。A,B 线程的事务一起回滚。 事务的特性里面就卡的死死的。所以,多线程事务从理论上就是行不通的。 ....

Seata原理

Seata原理

Seata 术语 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分支事务处理的资源,与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 原理图

分布式事务seata

分布式事务seata

Seata 是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT 模式是阿里首推的模式,阿里云上有商用版本的 GTS(Global Transaction Service 全局事务服务) 官网:https://seata.io/zh-cn/index.html 源码: https://github.com/seata/seata 官方 Demo: https://github.com/seata/seata-samples seata 版本:v1.4.0 Seata 的三大角色 在 Seata 的架构中,一共有三个角色 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分支事务....

spel实现复杂权限控制

spel实现复杂权限控制

权限控制中引入 SpEL 来让复杂的权限控制变的更简单,更灵活。 博客转载: juejin.cn/post/7226674759626571833 1 前言 对于在 SpringBoot 中,利用自定义注解 + 切面来实现接口权限的控制这个大家应该都很熟悉,也有大量的博客来介绍整个的实现过程,整体来说思路如下: 自定义一个权限校验的注解,包含参数 value 配置在对应的接口上 定义一个切面类,指定切点 在切入的方法体里写上权限判断的逻辑 乍一看,没毛病,学到了,学到了~,收藏起来。但是呢,等到实际用到的时候就傻眼了,为什么呢?在实际的开发中,你会发现,对于权限校验的需求场景是很多的,比如: 只要配置了任何角色,就可以访问 有某个权限就可以访问 放行所有请求 只有超级管理员角色才可以访问 只有登录后才可以访问 在指定时间段内可以访问 有某个角色的情况下才可以访问 同时具有指定的多个角色情况下才可以访问 傻眼了不,按照上面的实现逻辑的话怎么搞?加注解?写各种判断?这时候,其实我们就可以通过 SpEL 表达式来帮我们处理这个问题。 2SpEL 表达式 本文前面提到 SpEL,那么到底 Sp....

Arthas使用

Arthas使用

深入理解 Arthas:Java 诊断利器 在 Java 应用的生产环境中,当遇到性能问题或异常行为时,我们通常需要一套强大的工具来进行诊断和监控。Arthas,作为 Alibaba 开源的 Java 诊断工具,正是这样一个利器。它提供了丰富的命令来帮助开发者深入了解正在运行的 JVM。 什么是 Arthas? Arthas 是一个 Java 诊断工具,它提供了一系列功能强大的命令行,用于在线分析和监控 Java 应用程序。它能够帮助你解决应用运行时的各种复杂问题,如监控 JVM 的实时运行状态、查看类信息、监测方法调用和执行 SQL 语句等。 arthas 官网: https://arthas.aliyun.com/doc/ Arthas 常用命令 下面列出了一些 Arthas 里最常用的命令: dashboard:显示当前系统的实时数据面板。 thread:查看当前 JVM 的线程堆栈。 jvm:查看 JVM 的相关信息,如版本、启动参数等。 classloader:查看 JVM 类加载器的相关信息。 watch:监控方法执行情况,可以打印出方法参数值、返回值、抛出的异常等信息。 ....

手写Spring Tx

手写Spring Tx

背景 手写 Spring 进行到了事务了,上 2 篇文章介绍了手写 Spring IOC,spring Aop,这篇文章在介绍手写 Spring tx 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 Spring Framework 对事务管理提供了一致的抽象,其特点如下: 为不同的事务 API 提供一致的编程模型,比如 JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API 和 JDO(Java Data Objects) 支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用 提供比其他事务 API 如 JTA 更简单的编程式事务管理 API 与 Spring 数据访问抽象的完美集成 流程实现 从图中我们能够知道 Spring Tx 也是通过 AOP 增强,反射代理生成一个代理对象,进行对业务方法增强,处理我们的事务 有时候我们会在一个方法里面执行多个 SQL 语句,要想保证事务,必须保证这些是在同一个 connection 连接,同一个事务,这样回滚才....

人民有信仰 民族有希望 国家有力量