- 博客(65)
- 收藏
- 关注
原创 xxljob整合kettle
kettle开发过程中,我们本地可以使用可视化界面进行开发和调试,如果要推到生产上定时执行,我们可以借助开源任务调度框架,达到定时执行的目的。
2023-03-20 13:53:41 1209
原创 Feign如何区分业务调用
需求背景。我们有两个网关系统,一个是内网使用的,一个是外网使用。如果是内部系统使用调用的内网网关。但是作为网关管理平台,需要和两个网关系统都进行交互。如果对外接口,则和外部网关交互。网关本身提供的restful接口,便于使用,我们使用OpenFeign进行调用。但是带来一个问题。调用的时候如何指定内网还是外网网关?
2023-01-12 15:01:29 713
原创 Dubbo如何将netty的异步请求转为同步方法调用
double通过全局变量+唯一调用id+CompletableFuture将异步调用转为同步
2022-12-06 16:31:41 695
原创 aviator使用笔记
aviator可解决什么问题使用表达式代替ifelse实现复杂策略,类似于策略模式另外判断逻辑可以放到运营后台进行配置aviator如何使用核心方法 com.googlecode.aviator.AviatorEvaluator.execute表达式判断的时候,如果靠左边的条件可以拿到判定结果,右边就不用判断了,如果后面是方法的话,就不会调用了,减少了不必要的方法调用package com.demo.aviator;import com.google.common.collect.Immut
2022-04-07 11:26:59 1149
原创 maven如何发布源码
有两种方式pom中增加属性配置<properties> <maven.source.skip>false</maven.source.skip></properties>pom中增加插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifac
2022-02-22 14:25:50 1162
原创 slf4j全局变量
要实现追踪某一个方法的调用全过程,需要在方法入口增加日志关键字,并在每一行log中都带该关键字,就可以实现调用追踪需要两步step1.调用前后分别增加和删除关键信息org.slf4j.MDC.put(“kw”, UUID.randomUUID().toString().replaceAll("-", “”));。。。。。org.slf4j.MDC.remove(“kw”);step2.日志pattern中增加 %X{kw} 输出关键信息完成...
2021-08-11 13:36:17 190
原创 字符串作为队列工具类
主代码import org.apache.commons.lang3.StringUtils;/** * 字符串最为队列,处理工具类 * @author dongzhihua */public abstract class StringQueueUtils { public static final String SEPARATOR = ","; /** * 作为队列,pop一个元素 * @param queueStr * @return
2021-06-23 15:19:17 322
原创 java如何定位死锁
使用arthas非常简单运行thread -b 即可,见下图arthas安装见官网 https://arthas.gitee.io/install-detail.html测试代码如下package com.dong;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutorService;import java.util.concurrent.Execu
2021-06-02 19:09:41 233
原创 JAVA如何定位死循环原因
首先我们要清楚,死循环会导致当前线程cpu一直处于使用中状态。所以我们首先要找到最近一段时间cpu使用100%的线程,然后找到它所运行的代码块。使用到的工具:arthas、jmap、jvisualvm找到最近cpu使用100%的线程在arthas环境下运行dashboard命令,该命令5秒统计一次,但是线程【pool-1-thread-1】cpu使用时间为4.859,几乎是100%,可以和其它线程比较非常突出,那就是它了导出dump文件先使用jps找到对应的进程编号【xxx】再使用命令
2021-06-02 18:20:47 1012
原创 Java老白整理的程序猿知识图谱
Java老白整理的程序猿知识图谱说明:基于普通应用,依据请求发送到处理为主线梳理。1. 网络tcp/ip,http,https2. 负载nginx3. 容器tomcat4. 应用Spring,SpringBoot5. 外围5.1 存储MySQL,Mybatis,ConnectionPool,ShardingShere,主键生成(雪花,发号器)Redis5.2 RPCDubbo,Netty,SpringCloud5.3 MQRockitMQ,IO多路复用,Kaf
2021-05-21 10:18:41 113 1
原创 类加载打破双亲委派模型
什么是双亲委派类首先由AppClassLoader加载所需要的类,位于程序目录下如果没有找到要加载的类,则交给ExtClassLoader类加载器进行加载,位于JAVA_HOME/ext目录下最后,类通过上述类加载器都没有加载成功则由BootstrapClassLoader进行加载,位于JAVA_HOME/rt目录下为什么要打破有些接口声明和加载是由jdk完成的,但由应用自己实现。显然在类加载的时候找不到需要的类。此时需要打破双亲委派模型如何打破自定义类加载器继承ClassLoader,覆盖
2021-05-18 11:15:43 140
原创 rocketmq集群配置
虚拟机单机配置参见官网 http://rocketmq.apache.org/docs/quick-start/注意,本机配置broker集群有文件冲突问题,建议使用docker配置集群docker集群镜像拉取分别是nameserver、broker和管理后台镜像docker pull foxiswho/rocketmq:server-4.3.2docker pull foxiswho/rocketmq:broker-4.3.2docker pull styletang/rocketmq-c
2021-05-13 18:02:12 465
原创 RocketMQ学习笔记
RocketMQ是阿里出品的消息中间件,于2017年贡献给apache基金会成为顶级项目。因为经过高并发考验,所以我们选择他说在前面的话为什么要用MQ1. 异步解耦:使用发布订阅模式,可以使两个系统之间不直接交互,达到异步解耦的目的2. 削峰填谷:使用消息中间件,消息发布者发送消息的性能不依赖于下游系统,如果下游系统处理缓慢,可以让消息临时存储在消息中间件系统,达到均衡流量的效果3. 数据分发:如果多个系统需要同一类型的数据,使用消费订阅模式可以方便解决数据分发的问题引入MQ有一些问题依赖
2021-04-20 19:24:39 66
原创 HashMap学习笔记
数据结构HashMap存储的是键值对,key和value,使用Entry对象存储使用数组+链表的数据结构,1.8以后增加了红黑树的结构数据定位原理使用key做hash运算得到hash值,hash与数组长度取模得到数组下标index,从数组index位置对应的对象类型(链表/红黑树)获取元素。无论数组对应位置是链表或红黑树,都需要key相等时才认为是同一个元素关键概念CAPACITY:数组的长度size:总的元素个数,不等于数组长度loadFactor:加载因子threshold:数组扩容.
2021-03-27 13:56:52 99
原创 MVCC多版本并发控制学习总结
一、名词解释m_ids:当前所有活跃事务,当前所有未提交的事务版本链:记录修改过程中形成的版本链表,包含undolog日志和数据缓存页二、版本链开启事务 100开启事务 300insert into t_user(id, name) values(1, ‘张三’);update t_user set name=‘李四’ where id = 1;commit;update t_user set name=‘王五’ where id = 1;上述操作会生成如下版
2021-02-22 13:16:31 150
原创 StringBuffer和StringBuilder单线程谁的性能更好
结论:不一样的量级,结果不一样。原因还在分析中,有直到的大拿帮忙回复一下import org.junit.Test;/**@Author jvm@Date 2021/1/28 07:50StringBuffer和StringBuilder性能测试,结果如下count:1WStringBufferExecutor: 7StringBuilderExecutor: 1count:1KWStringBufferExecutor: 347StringBuil
2021-01-28 08:09:59 239 1
原创 JAVA内存管理系列之二:垃圾回收器总览
Serial新生代垃圾回收器,采用复制算法单线程回收,对于小内存和单核CPU,性能优秀,但是当内存过大会回收时间会变长而使程序出现长时间卡顿Parallel Scavenge新生代垃圾回收器,采用复制算法多线程回收,效率很大提升,据说内存大于10G也会出现系统卡顿ParNew同 Parallel Scavenge,只是为了和CMS配合使用CMS老年代垃圾回收器,采用标记清除算法注意:CMS不宜用于生产,因为会产生大量碎片空间,当足够碎片时启用SeriaOld垃圾回收器G1
2021-01-16 22:34:23 95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人