如何在Spring中优雅的使用责任链模式

背景:收到需求需要校验用户身份证和姓名是否匹配,要求可以顺序执行不同的校验方法,任一步返回结果,很容易想到责任链模式,网上的例子多半是原理讲解类的,没有充分使用 Spring 特点,所以记录一下。技术有限,如有纰漏,欢迎指正。要求增加新的处理渠道不改动原来的代码。使用 Spring 的方式编写。重点
2022年05月26日 1,148次浏览

jprofiler命令行 生成快照

使用arthas+jprofiler做复杂链路分析 背景arthas提供了profiler命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。但是有一个问题,当async-profiler全量采样导出的svg文件太大
2022年05月21日 842次浏览

优雅地使用 ThreadLocal 传递参数

前言在我们日常Web开发中难免遇到需要把一个参数层层的传递到最内层,然后中间层根本不需要使用这个参数,或者是仅仅在特定的工具类中使用,这样我们完全没有必要在每一个方法里面都传递这样一个通用的参数。如果有一个办法能够在任何一个类里面想用的时候直接拿来使用就太好了。Java的Web项目大部分都是基于To
2022年05月08日 1,260次浏览

从一个实际问题出发讲讲排错思路

现状是,保存作品,发放奖品,偶现500错误,请求超时,查看日志,错误日志如下。查看日志org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transa
2022年05月07日 714次浏览

mysql性能瓶颈-高CPU定位

在性能压测过程中,导致数据库CPU很高的原因有很多种,一般和慢SQL也有关(因为每条SQL要么占CPU高,要么占IO高,大体是这样),那么如何分析到是某些SQL引起的呢?分析时机:运行性能测试,监测到CPU比较高时,实时分析;1、SQL引起的高CPU**先抛出结论:**如果数据分布不合理,会导致sq
2022年05月06日 1,093次浏览

一篇尽量用人话把DDD讲明白的文章

引言在人类发展史上,当人们遇到棘手的问题时,一个惯用的手段,通常是将问题拆分比如研究一个桃树由什么组成?首先根据植物的器官,细分为树叶,桃花,桃子,树茎,树根,等。于是问题变成了,树叶,桃花,桃子,各由什么组成?树叶是由叶片,叶柄,拖页组成,桃花由,花瓣,花粉,花柱组成,等。于是问题又变成了,叶柄是
2022年05月02日 828次浏览

领域模型中的VO,DO,DTO,PO 的划分

领域模型中的实体类领域模型中的实体类分为四种类型:VO、DTO、DO、PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。业务分层为:视图层(VIEW+ACTION),服务层(SERVICE),持久层(DAO)相应各层间实体的传递如下图:项目中我们并没有严格遵循这种传递关系,
2022年05月02日 1,208次浏览

DDD之仓储模式和工厂模式

仓储模式为了解耦领域逻辑和数据处理逻辑,在中间加了薄薄的一层仓储。    仓储模式包含仓储接口和仓储实现,仓储接口面向领域层提供基础层数据处理相关的接口,仓储实现则完成仓储接口对应的数据持久化相关的逻辑处理。一个聚合配备一个仓储,由仓储完成聚合数据的持久化。领域层逻辑面向仓储接口编程,聚合内的数据持
2022年05月02日 1,227次浏览

初识失血,贫血,充血,胀血四种模型

领域模型分为4大类:失血模型、贫血模型、充血模型、胀血模型。这类理论都是些软件设计领域的大牛(如Martin Fowler)提出来的。想要理解这几个分类,先要知道“血”指的是domain object的model层内容。1、失血模型失血模型中,domain object只有属性的get set方法的
2022年05月01日 1,304次浏览

依赖倒置的必要性

一、概念依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低
2022年05月01日 751次浏览