自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 方便高效的JAVA对象转换工具

1. 简介lamia 是一个高性能的Java 实体映射工具, 使用简单的注解就能帮助你在编译期生成对应的转换代码项目地址:githubgitee1.1 优势方便灵活的编译期快速生成转换代码支持和lombok等AnnotationProcessor框架同时使用支持Map/List 等集合类型之间的转换不依赖idea插件支持idea的增量编译1.1 和 MapStruct的区别本框架和MapStruct类似,都是在编译期生成对应的转换代码,那么作者为什么要去重复造这个轮子?作者

2021-09-30 11:12:18 3282 4

原创 spring API扫描插件

1. 简介本项目是基于gamma的一个插件gammagithubcsdn本项目是用来扫描一个spring的项目中有多少个Api接口,然后收集这个API接口的入参/出参信息统计后通过http发送给后端服务项目地址:github1.1 使用场景在微服务背景下 服务之间有大量的RPC,那么当下游服务接口更变后没有及时通知到对应的上游服务,就会导致上游接口报错那是否可以在CI流水线中采集已经打包好的业务JAR的接口,然后把采集到的信息都统一交给一个服务储存,如果发现有服务的接口发生

2021-07-19 12:01:15 643

原创 高效可扩展的 jar 扫描工具: gamma

1. 简介本项目是一个jar包扫描工具,可以支持插件化订制不同的扫描逻辑支持以下功能:插件化订制扫描逻辑,让扩展更加容易将扫描到的文件加载到jvm中以class的形式返回给处理插件,让扫描逻辑写起来更加的容易支持springBoot jar 的扫描项目地址:gamma扫描器1.1 用途设计gamma的初衷是为了能在ci流水线中快速的检查已经打包好的的业务jar,并且能轻易的扩展扫描器的功能,以及和业务解耦1.2 为什么不去扫描java文件对于语法检查等checkstyle插件确实直

2021-07-19 11:57:36 1626 5

原创 InnoDB行格式

1. 简介我们平时都是以行为单位去插入数据的, 在innoDB中, 设计了4种不同的的行格式compactredundantdynamiccompressed以后可能会出现更多的行格式,但是 不管怎么变, 原理都是大概相同的2. compact 格式2.1 变长字段列表对于 varchar 这样的字段,因为长度是不确定的,所以需要记录下这个字段真正占用的空间是多少, 因为所有字段的数据信息都是连在一起的,并有换行符或分割符, 如果不知道变长字段到底占用了多少,那么将不能正确解析出对应

2021-03-27 18:09:20 256 1

原创 分布式任务框架Lonejob

1. 简介lonejob 是一个简单的分布式任务框架, 同时他也是一个spring-boot-starter,所以只能运行在spring-boot 的环境下1.1 能做什么?市面上有很多优秀的分布式任务框架, 比如elastic-job, xxl-job 等, 但是我的需求因为太简单了,不需要复杂的均衡策略,也不需要花里胡哨的监控以及动态配置定时任务, 我仅仅想当项目启动的时候去启动一个定时器,这个定时器将只会在一个实例中启动,当启动定时器的实例挂了,别的实例会继续启动一个定时器来顶替原来实例的

2020-11-09 19:10:47 188

原创 JAVA轻量级高性能AOP框架 ----- gordian

1. 简介1.1 项目地址传送门1.2为什么造这个轮子博主太闲了现在的spring aop 已经非常的完善了,但是却有以下几个小缺点当引入了太多第三方jar 后,Pointcut 的定义被分散到了不同的 jar, 你可能不知道在你的业务方法在执行之前会去执行多少方法,这些方法都会干什么。比如@Transactional 注解,大家都知道他的原理就是 aop,那么我想看看里面他会在我方法执行前,执行后做了什么,就需要去翻文档才能知道他执行aop的类在哪里,这算不错的体验了,那如果是你接手了一个古

2020-08-29 18:16:52 1992 2

原创 skywalking7 源码解析 (3) :agent启动服务分析以及性能影响

1. 简介前2篇介绍了 agent 如何去修改我们的业务代码,以及如何去收集、发送 trace 数据,但是agent的作用不仅如此,那么他还对我们的代码做了一些什么事情,会对我们的程序造成什么样的性能影响,本文将为你揭晓2 . BootService 接口方法 SkyWalkingAgent#premain 之前讲解过这是 agent 的入口方法,这个方法的 前半部分都是在 加载配置文件、加载插件以及拦截了类加载器以便后面去修改字节码,在此之外agent还有最后一个步骤,就是去加载所有BootS

2020-06-08 12:05:19 5357 4

原创 skywalking7 源码解析 (2) : agent采集trace数据

1. 简介本文源码解析使用的版本是 skywalking 7.0 , 不同版本实现上可能由一定差异,但是思想上大致相同上篇文章介绍了skywalking-agent的整体架构以及插件的加载原理。skywalking源码解析 (1) : agent插件加载原理但是仅仅知道了他如何去加载插件,那至于在他使用agent去修改业务代码后如何去收集trace数据 那么请继续往下看2. trace数据结构在看源码之前,我们先来了解一下 在skywalking中trace数据 是以什么样的数据结构去保存

2020-06-04 17:04:11 3671 1

原创 skywalking线程池插件,解决lambda使用问题

1. 简介分布式链路追踪其实原理都很简单,每一个请求过来的时候,把一个context存到ThreadLocal里面,然后随着线程一路传递下去就行,一个请求大多数时候都是一个线程去执行下去所以并没有什么问题,但是如果在请求中使用了ThreadPool那么ThreadLocal中的context就会失联(如果使用的是Thread,ThreadLocal是可以继续传递下去的,具体原因可以去看ThreadLocal和ThreadPool的实现这里就不过多解释了),所以需要插件的支持去把这个失联的context给找

2020-05-20 16:35:54 7043 14

原创 skywalking7 源码解析 (1) : agent插件加载原理

1 . 简介本文涉及到的源码取自版本 : apache-skywalking-apm-7.0.0 ,不同版本实现差异可能会有一些区别,但是大体框架上没有变化的 , 一些地方为了方便理解,我拆分了 lamda 表达式,或者把一些写在一起的代码给做了拆分,但是整体逻辑是不变的2. javaAgentskywalking 是一个 分布式追踪系统 , 他可以帮助我们看到一个请求经过了多少个微服务...

2020-04-06 19:44:02 6151 2

原创 spring @Conditional 源码解析 以及@ConditionalOnMissingBean 失效之谜

## 1 .前言本文基于 spring-boot 2.2.2.RELEASE 版本,如果 因版本变动导致实际细节和本文不符,概不负责@Conditional 注解在 spring-boot中大量使用,是 spring-boot 自动配置不可缺少的一环,本文将讲解 @Conditional 的运行机制,涉及大量源码如果觉得枯燥可以直接拉到最后看结论@Conditional 虽然在spri...

2019-12-29 21:14:29 1540 4

原创 docker 创建 dubbo-admin 2.7

dubbo被Apache 孵化后, 不仅 dubbo本身变化巨大,同时也出了新的 dubbo-admin . 新的dubbo-admin 前后端分离, 后端使用了 spring boot ,前端使用了 vue. 这里博主已经封装好一个 docker 镜像,直接使用以下命令就能创建镜像.docker pull cao2068959/dubbo-admin:...

2019-06-21 20:37:15 2939 2

原创 spring boot多数据源动态切换, 多数据源事务管理

1 . 项目目标 实现 不同数据源的切换 (使用AbstractRoutingDataSource) 不同数据源之间,事物管理,多个数据源之间同时commit或者同时rollback 兼容不同的连接池(dbpc,druid) 兼容mybatis,JPA 等不同的方式 (spring- boot -starter)以上就是该项目实现的所有功能,因代码量和篇幅...

2019-06-09 11:44:06 5849 8

原创 JPA 原生SQL分页查询,踩坑记录

1. 问题简述JPA 分页查询这个很简单,只要在接口上加上一个参数 Pageable比如但是 仔细看 我自定义的 SQL 这里用了 a.* 来只获取一张表的字段.但是他生成的 SQL 语句就成了.这样就导致了 查询异常.2 . 解决方案1 . 指定count的字段在@Query 注解中添加一个参数然后,生成的SQL语句就是...

2019-05-27 21:00:55 4220 6

原创 自定义spring boot-starter,实现自动配置,自定义注解扫描注入(类似dubbo-starter)

1. 简介 本文,自定义starter是为了扩展 之前自己写的一个RPC框架,所以本文的案列 就是在这个RPC框架之上,实现自动配置 传送门 :手写RPC框架博主现在想把这个 RPC框架封装成一个 starter,实现以下功能1 . 在maven 引入对应starter 实现自动配置,yaml文件的参数自定义2 . 在项目启动时,扫描 打了 自定义注解@Chy...

2019-05-17 17:25:44 6030 3

原创 手写实现RPC 框架

1.项目架构 一个简易的rpc框架,别的先不多说上githubhttps://github.com/cao2068959/chyrpc20 注册中心 : zookeeper (使用curator 操作) 通信框架: netty (4.1.25版本) 序列化: kryo以下只写了大体项目流程,以及展示部分代码,具体请...

2019-05-17 15:06:20 780

原创 嵌入式tomcat分析,并手写加载springMvc

1. 简介spring boot的嵌入式容器用起来很爽,所以博主也想搞一个类似可以不依赖外部容器的轮子.虽然可以直接用maven的插件tomcatX-maven-plugin 完成,但是高版本的更新太慢,所以有了以下的轮子.2. tomcat结构介绍为什么要先放这张图嗯,因为嵌入式的tomcat API 设计也是按照这个结构设计的.博主并不想看他的API文档,想靠这张图猜一下他...

2019-05-03 00:17:12 1649 12

原创 手写springMVC

1. 简介 spring全部手写的过程,原理,设计模式 在博客里阐述,这是个浩大的工程.同时我也相信你是基本不能看到最后的.这里博主写了个简易的springMvc.代码比较简单.而且都写了注释,我想比看博客看我BB,要简单的多.废话就不多说了,上github2.项目介绍项目地址 :https://github.com/cao2068959/ChySpring2.0....

2019-04-07 23:07:46 265

原创 jdk动态代理实现原理,并造一个类似的轮子

1. JDK动态代理最小案例JDK 动态代理干什么 怎么用,我想并不需要复述,这里快速贴上本案列的代码委托类:public class Xiaobai implements House { @Override public void buy() { System.out.println("我是小白,我要买房"); }}委托接口:p...

2019-03-23 23:03:49 251

原创 dubbo配置文件模版

提供者<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http:...

2019-03-18 18:00:03 267

原创 HttpClient封装,并保持cookie登录状态

基础工具类该类封装了get和post方法,传入url, header, param 即可食用package com.zent.dispathching.sevice;import com.zent.dispathching.bean.HttpClientResult;import org.apache.http.Header;import org.apache.http.Http...

2018-11-27 15:02:13 2409 2

原创 springboot2+ redis+fastjson 自定义缓存管理器,设置序列化方式为fastjson

    spring boot 自动配置的缓存序列化为 JdkSerializationRedisSerializer  ,缺点大家都懂,占用过多空间,跨平台困难,可读信差,所以把他换成json的序列化方式。    当然,spring boot 也已经准备了JSON的序列化器GenericJackson2JsonRedisSerializer , Jackson2JsonRedisSeri...

2018-11-21 11:26:34 5016 3

空空如也

空空如也

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

TA关注的人

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