博客园 - lichmama
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=56865
2022-06-09T07:14:44Z
lichmama
https://www.cnblogs.com/lichmama/
feed.cnblogs.com
https://www.cnblogs.com/lichmama/p/16354774.html
实现简单的多节点抢注(主)功能 - lichmama
前言 在分布式系统中经常会遇到某个业务仅需要单个节点执行的场景,通常这样做是为了解决并发引起的状态不一致问题。 但是为了防止出现单点故障,又需要为这些节点做故障转移的实现。 简单的方案是同时起多个节点,但是只有一个节点作为主节点执行业务,其他的作为备份节点需要实时跟踪主节点运行状态, 一旦发现主节点
2022-06-08T02:39:00Z
2022-06-08T02:39:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】前言 在分布式系统中经常会遇到某个业务仅需要单个节点执行的场景,通常这样做是为了解决并发引起的状态不一致问题。 但是为了防止出现单点故障,又需要为这些节点做故障转移的实现。 简单的方案是同时起多个节点,但是只有一个节点作为主节点执行业务,其他的作为备份节点需要实时跟踪主节点运行状态, 一旦发现主节点 <a href="https://www.cnblogs.com/lichmama/p/16354774.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/13541759.html
BTrace-无代码侵入的Java调试工具 - lichmama
BTrace简介 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java程序的类来工作。BTrace将跟踪操作插入到正在运行的Java程序的类中,并对跟踪的程序类进行热交换。 相关信息参考 https://github.com/btraceio/btra
2020-08-21T08:31:00Z
2020-08-21T08:31:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】BTrace简介 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java程序的类来工作。BTrace将跟踪操作插入到正在运行的Java程序的类中,并对跟踪的程序类进行热交换。 相关信息参考 https://github.com/btraceio/btra <a href="https://www.cnblogs.com/lichmama/p/13541759.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/12964467.html
实现一个支持自定义函数的模板表达式 - lichmama
工作中需要用到一个支持变量替换和自定义函数的模板表达式,发现现有的开源项目不能满足,于是自己造了个轮子。 该模板表达式核心就三个文件: ExpressionNode.java -- 表达式节点 public class ExpressionNode { /** 模板 **/ public stati
2020-05-26T03:30:00Z
2020-05-26T03:30:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】工作中需要用到一个支持变量替换和自定义函数的模板表达式,发现现有的开源项目不能满足,于是自己造了个轮子。 该模板表达式核心就三个文件: ExpressionNode.java -- 表达式节点 public class ExpressionNode { /** 模板 **/ public stati <a href="https://www.cnblogs.com/lichmama/p/12964467.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/12858517.html
使用URLClassLoader动态加载jar - lichmama
背景介绍 在某些项目中会使用插件化技术实现一些动态“插拔”或热更新的功能。一般的做法是,定义一个标准接口,然后将实现分离进行独立部署或更新。 现在有个场景,系统希望引入一些特殊的业务“函数”,并支持热更新。来看看我们是怎么实现的。 业务函数接口:IFunction.java /** 业务函数接口 *
2020-05-09T08:28:00Z
2020-05-09T08:28:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】背景介绍 在某些项目中会使用插件化技术实现一些动态“插拔”或热更新的功能。一般的做法是,定义一个标准接口,然后将实现分离进行独立部署或更新。 现在有个场景,系统希望引入一些特殊的业务“函数”,并支持热更新。来看看我们是怎么实现的。 业务函数接口:IFunction.java /** 业务函数接口 * <a href="https://www.cnblogs.com/lichmama/p/12858517.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/12364356.html
在单台服务器上搭建elasticsearch集群 - lichmama
很遗憾,这样的集群基本上没啥用处,没有容错能力。因此本文仅可作为学习ES集群部署的参考文档。 系统配置: 修改/etc/hosts增加 127.0.0.1 node01 127.0.0.1 node02 127.0.0.1 node03 修改/etc/sysctl.conf增加配置,然后执行sysc
2020-02-25T14:36:00Z
2020-02-25T14:36:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】很遗憾,这样的集群基本上没啥用处,没有容错能力。因此本文仅可作为学习ES集群部署的参考文档。 系统配置: 修改/etc/hosts增加 127.0.0.1 node01 127.0.0.1 node02 127.0.0.1 node03 修改/etc/sysctl.conf增加配置,然后执行sysc <a href="https://www.cnblogs.com/lichmama/p/12364356.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/12311343.html
实现一个简单的Kafka多线程消费模型 - lichmama
最近项目上用到了Kafka(作为数据源接入),这里将自己的实践分享出来,供大家参考或针砭。 从网上查阅资料发现,基本上有2中与Kafka对接的方式: 1.Spring-Kafka 2.调用Kafka API自己实现ConsumerClient Spring-Kafka的基本原理就是Spring自动轮
2020-02-15T07:45:00Z
2020-02-15T07:45:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】最近项目上用到了Kafka(作为数据源接入),这里将自己的实践分享出来,供大家参考或针砭。 从网上查阅资料发现,基本上有2中与Kafka对接的方式: 1.Spring-Kafka 2.调用Kafka API自己实现ConsumerClient Spring-Kafka的基本原理就是Spring自动轮 <a href="https://www.cnblogs.com/lichmama/p/12311343.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11821502.html
使用canvas实现图片预览、缩放(压缩)以及生成文件下载 - lichmama
参考 工作中遇到的一个问题,手机端上传图片出现卡顿,经排查发现是图片过大引起的。参考网上资料,整理出一个图片压缩(缩放)的demo页面。 demo包含图片预览,缩放以及生成文件下载三个功能,放在这里备忘,有需要的朋友可以拿去参考。 canvas-preview-and-zoom.html <!DOC
2019-11-08T09:02:00Z
2019-11-08T09:02:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】参考 工作中遇到的一个问题,手机端上传图片出现卡顿,经排查发现是图片过大引起的。参考网上资料,整理出一个图片压缩(缩放)的demo页面。 demo包含图片预览,缩放以及生成文件下载三个功能,放在这里备忘,有需要的朋友可以拿去参考。 canvas-preview-and-zoom.html <!DOC <a href="https://www.cnblogs.com/lichmama/p/11821502.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11386192.html
使用docker部署nginx+tomcat架构(3):使用docker-compose简化部署操作 - lichmama
经历了之前的两篇,我们已经大体上了解了docker部署容器的过程。 不过,整个部署过程中需要手动输入很多的docker命令,稍显繁琐并且容易出错。那么有没有一种相对简洁优雅的方式来完成这些部署工作呢?答案是有的,docker-compose(一下简称“compose”)正是为此而生。 关于docke
2019-08-20T14:56:00Z
2019-08-20T14:56:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】经历了之前的两篇,我们已经大体上了解了docker部署容器的过程。 不过,整个部署过程中需要手动输入很多的docker命令,稍显繁琐并且容易出错。那么有没有一种相对简洁优雅的方式来完成这些部署工作呢?答案是有的,docker-compose(一下简称“compose”)正是为此而生。 关于docke <a href="https://www.cnblogs.com/lichmama/p/11386192.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11380169.html
使用docker部署nginx+tomcat架构(2):访问mysql数据库 - lichmama
上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远。其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点。 废话少说,直接进入正题。 首先拉取mysql镜像: 创建本地mysql目录: 在mysql/conf目录下创建配置文
2019-08-19T14:24:00Z
2019-08-19T14:24:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远。其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点。 废话少说,直接进入正题。 首先拉取mysql镜像: 创建本地mysql目录: 在mysql/conf目录下创建配置文 <a href="https://www.cnblogs.com/lichmama/p/11380169.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11366262.html
使用docker部署nginx+tomcat架构 - lichmama
架构说明: 参考文档: 配置docker镜像仓库:/etc/docker/daemon.json 下载nginx和tomcat的镜像: 创建nginx和tomcat本地目录,稍后将挂载到docker容器上: 在tomcat/webapps/ROOT中创建index.html: 启动tomcat: 获
2019-08-16T12:47:00Z
2019-08-16T12:47:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】架构说明: 参考文档: 配置docker镜像仓库:/etc/docker/daemon.json 下载nginx和tomcat的镜像: 创建nginx和tomcat本地目录,稍后将挂载到docker容器上: 在tomcat/webapps/ROOT中创建index.html: 启动tomcat: 获 <a href="https://www.cnblogs.com/lichmama/p/11366262.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11250274.html
批量转换文件字符编码(GBK转UTF-8) - lichmama
今天收到一份代码,拖到IDE中发现乱码,看来下编码是GBK的(😓)。只能手写个小工具批量转换下。代码在这里分享下,需要的可自取。 核心文件就两个: ConverterUtil.java public class ConverterUtil { private static String lineS
2019-07-26T06:47:00Z
2019-07-26T06:47:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】今天收到一份代码,拖到IDE中发现乱码,看来下编码是GBK的(😓)。只能手写个小工具批量转换下。代码在这里分享下,需要的可自取。 核心文件就两个: ConverterUtil.java public class ConverterUtil { private static String lineS <a href="https://www.cnblogs.com/lichmama/p/11250274.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11148518.html
将行数据转换成Java(POJO)对象 - lichmama
工作中经常会遇到将行数据转换成Java(POJO)对象的场景,其中关于字段校验和类型转换的处理繁琐而冗余,对于有代码洁癖的人着实不能忍。这里分享下自己封装的工具代码,也许能够帮助你更简单地完成此类任务。 先将以下五个文件加入你豪华午餐(项目😄)中 FieldItem: /** * * @autho
2019-07-07T14:46:00Z
2019-07-07T14:46:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】工作中经常会遇到将行数据转换成Java(POJO)对象的场景,其中关于字段校验和类型转换的处理繁琐而冗余,对于有代码洁癖的人着实不能忍。这里分享下自己封装的工具代码,也许能够帮助你更简单地完成此类任务。 先将以下五个文件加入你豪华午餐(项目😄)中 FieldItem: /** * * @autho <a href="https://www.cnblogs.com/lichmama/p/11148518.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/11143662.html
基于AOP的插件化(扩展)方案 - lichmama
在项目迭代开发中经常会遇到对已有功能的改造需求,尽管我们可能已经预留了扩展点,并且尝试通过接口或扩展类完成此类任务。可是,仍然有很多难以预料的场景无法通过上述方式解决。修改原有代码当然能够做到,但是这会增加许多附加成本,回归测试带来大量工作和一些潜在的未知风险。特别是一些极其重要的公共模块,可谓牵一
2019-07-06T10:47:00Z
2019-07-06T10:47:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】在项目迭代开发中经常会遇到对已有功能的改造需求,尽管我们可能已经预留了扩展点,并且尝试通过接口或扩展类完成此类任务。可是,仍然有很多难以预料的场景无法通过上述方式解决。修改原有代码当然能够做到,但是这会增加许多附加成本,回归测试带来大量工作和一些潜在的未知风险。特别是一些极其重要的公共模块,可谓牵一 <a href="https://www.cnblogs.com/lichmama/p/11143662.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/10249435.html
ibatis实现分页查询 - lichmama
最近在做老项目改造,分享一个之前写的ibatis(这里特指ibatis2.x的版本)分页插件。 大致原理就是通过重写SqlExecutor的executeQuery方法,实现分页查询,支持mysql和oracle。 项目地址:https://git.coding.net/lichmama/ibati
2019-01-10T05:21:00Z
2019-01-10T05:21:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】最近在做老项目改造,分享一个之前写的ibatis(这里特指ibatis2.x的版本)分页插件。 大致原理就是通过重写SqlExecutor的executeQuery方法,实现分页查询,支持mysql和oracle。 项目地址:https://git.coding.net/lichmama/ibati <a href="https://www.cnblogs.com/lichmama/p/10249435.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/10124582.html
写一个简单的批量文件上传插件 - lichmama
分享一个自己写的简单的批量文件上传插件,git地址:https://git.coding.net/lichmama/easyUpload.git 该插件很简单,由三个文件组成:easyUpload.js,easyUpload.css,以及loading.gif --代码请从git获取 参数说明: 下
2018-12-15T12:34:00Z
2018-12-15T12:34:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】分享一个自己写的简单的批量文件上传插件,git地址:https://git.coding.net/lichmama/easyUpload.git 该插件很简单,由三个文件组成:easyUpload.js,easyUpload.css,以及loading.gif --代码请从git获取 参数说明: 下 <a href="https://www.cnblogs.com/lichmama/p/10124582.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/9328150.html
使用Swagger2构建SpringMVC项目中的Restful API文档 - lichmama
使用Swagger自动生成API文档,不仅增加了项目的可维护性,还提高了API的透明度更利于快速测试等工作,便于更快地发现和解决问题。 本篇文章只记录整合过程,关于Security Configuration等其他特性这里就不展开讲了,感兴趣的可以通过以下链接了解更多。 参考文档: 项目中各组件的版
2018-07-18T03:19:00Z
2018-07-18T03:19:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】使用Swagger自动生成API文档,不仅增加了项目的可维护性,还提高了API的透明度更利于快速测试等工作,便于更快地发现和解决问题。 本篇文章只记录整合过程,关于Security Configuration等其他特性这里就不展开讲了,感兴趣的可以通过以下链接了解更多。 参考文档: 项目中各组件的版 <a href="https://www.cnblogs.com/lichmama/p/9328150.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/9262510.html
支持读取远程配置文件的配置类 - lichmama
可将配置与工程分离,并减少一些分布式工程中关于配置的重复劳动。 至于,如果使用redis是不是一个更好的选择这就仁者见仁了。 配置样例: ConfigUtil: package com.lichmama.demo.common.util; import java.io.BufferedReader;
2018-07-04T03:36:00Z
2018-07-04T03:36:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】可将配置与工程分离,并减少一些分布式工程中关于配置的重复劳动。 至于,如果使用redis是不是一个更好的选择这就仁者见仁了。 配置样例: ConfigUtil: package com.lichmama.demo.common.util; import java.io.BufferedReader; <a href="https://www.cnblogs.com/lichmama/p/9262510.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/9232935.html
(转载)如何在当前目录下快速打开cmd - lichmama
很多时候我们需要打开命令行然后进入到相应目录进行一些操作。 常规的做法是: 假如我们要进入的是D盘foo文件夹下的一个bar子文件夹,路径是这样的D:\foo\bar,首先输入" D:"回车进入D盘 如果需要进行频繁命令行操作,每次都要通过这样的方式来进行,势必很麻烦。 按住Shift键右击鼠标打开
2018-06-27T03:06:00Z
2018-06-27T03:06:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】很多时候我们需要打开命令行然后进入到相应目录进行一些操作。 常规的做法是: 假如我们要进入的是D盘foo文件夹下的一个bar子文件夹,路径是这样的D:\foo\bar,首先输入" D:"回车进入D盘 如果需要进行频繁命令行操作,每次都要通过这样的方式来进行,势必很麻烦。 按住Shift键右击鼠标打开 <a href="https://www.cnblogs.com/lichmama/p/9232935.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/8976092.html
Java实现一个简单的事件监听器 - lichmama
关于事件监听我们需要知道的一些基础知识。 a)事件三要素(who when what): b)事件模型的构成: c)事件流转过程: 那么基于以上背景知识,我们来是实现一个简单的监听器,并测试一下事件监听的完整流程。 根据事件三要素设计出一个简单合理的事件载体:Event 事件实现:MyEvent p
2018-05-01T05:20:00Z
2018-05-01T05:20:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】关于事件监听我们需要知道的一些基础知识。 a)事件三要素(who when what): b)事件模型的构成: c)事件流转过程: 那么基于以上背景知识,我们来是实现一个简单的监听器,并测试一下事件监听的完整流程。 根据事件三要素设计出一个简单合理的事件载体:Event 事件实现:MyEvent p <a href="https://www.cnblogs.com/lichmama/p/8976092.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lichmama/p/8728262.html
SpringBoot + CXF快速实现SOAP WebService(支持Basic Auth) - lichmama
唠叨两句 需求背景 开始动手 编写服务代码(示例代码) 鉴权拦截器 编写配置类 修改CXF默认发布路径(application.properties) 启动项目后访问http://localhost:8000/soap/userService?wsdl 使用SoapUI测试一下,看上去没什么问题 客
2018-04-06T09:24:00Z
2018-04-06T09:24:00Z
lichmama
https://www.cnblogs.com/lichmama/
【摘要】唠叨两句 需求背景 开始动手 编写服务代码(示例代码) 鉴权拦截器 编写配置类 修改CXF默认发布路径(application.properties) 启动项目后访问http://localhost:8000/soap/userService?wsdl 使用SoapUI测试一下,看上去没什么问题 客 <a href="https://www.cnblogs.com/lichmama/p/8728262.html" target="_blank">阅读全文</a>