- 博客(242)
- 资源 (15)
- 收藏
- 关注
原创 Spring 自定义集合实现策略
日常开发中,如果遇到复杂业务通常会用一个接口实现多个实现类。需要根据对应参数判断获取不同实现类。例如支付场景,根据选择支付方式,选择相应路由。如果实现类不多,通常会这样。如果实现类多了,每次新增一个实现,还需要修改路由,写的就恶心了。有没有什么好的方式可以解决呢?
2024-07-27 21:03:37
238
原创 allatori-JAVA代码混淆工具
Allatori不仅仅是混淆,它还能最大限度地减少应用程序的大小,提高速度,同时除了你和你的团队,任何人都无法读懂你的代码。Allatori和所有现代的Java混淆器一样,具有完整的水印功能,可以为您的软件提供适当的许可!虽然大多数第二代混淆器都能提供值得信赖的保护,但我们在Allatori中开发了一些额外的功能,使代码的反向工程几乎不可能。如果你有必要保护你的软件,如果你想减少它的大小和处理时间,Allatori混淆器是为你准备的。
2023-07-05 17:50:43
1356
原创 使用spring BeanPostProcessor处理实例化对象
编写了一个类DesensitizeValueFilter基于fastjson数据脱敏处理过滤器,因为项目统一配置了HttpMessageConverters。不想强行改动加入我的配置,打算基于ConditionalOnProperty条件注解开启配置,对FastJsonHttpMessageConverter做初始化后处理。
2023-06-09 15:29:25
250
原创 mybatis数据加密脱敏
在研发过程中某些业务场景是不允许存储明文的,例银行卡 身份证类。怎么实现自动加密解密呢?可以利用mybatis Interceptor 做处理,输入明文参数通过拦截器自动加密。查询出结果集自动解密。在web层展示可以对敏感字段加*处理。至此mybatis层加密解密搞定,web层代码如下。本系统使用fastjson为序列化框架。
2023-05-18 14:34:47
1300
1
原创 java生成mock数据
前言在开发过程中,自测过程中。通常都是把参数固定了,做单元测试生成数据都是一样的,缺乏真实性。希望能尽量生成一些真实数据,查阅了点资料发现还是有些不错的框架。jmockdatajava-fakermockJs(一个前端js框架,java也可以调用js)一起来玩玩,用起来吧!!!1 jmockdata源码地址:GitHub - jsonzou/jmockdata: The plugin to mock the java data by random.贴上github上一段描述
2022-01-21 11:24:13
7775
5
原创 mysql 表结构差异对比小工具
项目场景:在进行慢sql评审时,发现测试环境增加了索引生产并没有。然后有些表字段长度也不一样,坑大发了。决定写一个小工具对比一下测试跟生产表结构差异,大致思路连接数据库获取建表语句进行对比,忽略主键自增id。因为测试跟生产主键id自增会有不同,如果建表语句不一致,则需要比对文本高亮显示。在网上copy了一个别人写的高亮算法,生成了一个html预览。直接上代码package com.xuyw.test.export;import com.alibaba.druid.pool.DruidDat
2022-01-20 10:07:06
2586
原创 spring boot email 切换outlook邮箱
项目原先邮件发送采用spring mail ,一直用的是腾讯企业邮箱。最近需要切换outlook,原本以为只需简单改下账户密码及host即可。切换之后发现发送失败,经过一番查找终于发送成功。记录一下问题。原先邮件发送配置如下spring.mail.username=xxxxxxxxxspring.mail.password=xxxxxxxxxspring.mail.host=smtp.exspring.mail.qq.comspring.mail.port=465spring.ma..
2022-01-19 16:40:52
4871
1
原创 mysql 四大事务隔离级别及实现方式
今天聊聊老生长谈的mysql事务隔离级别,相信大家应该听到这个名词不会陌生。我们都知道事务具有ACID特性(原子性,一致性,持久性,隔离性),今天聊的主题肯定是跟隔离性有关的,以下都基于mysql innodb引擎名词概念说明脏读 读取到其他事务还没有提交的数据 例:事务A在执行过程中,事务B插入or修改一条数据此刻尚未提交。A此刻查询出了B插入的记录,若B事务回滚。则A查询出了不正确的记录,这就是脏读现象 不可重复读 同一事务内查询,由于别的事务将数据修改or删除...
2021-12-12 17:59:26
1142
1
原创 redssion 延迟队列源码分析
redssion 是个优秀的开源框架,里面实现了很多常用的redis操作。例 分布式锁及分布式延时队列,api使用操作简单,功能十分强大。如果想进一步了解可访问https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 本次主要研究分析延迟队列的实现,废话不多说先上个简单的demo。package com.xuyw.redisson;import lombok.extern.slf4j.Sl...
2021-11-14 11:21:35
2358
1
原创 频繁full gc 定位
问题描述: 今天有个朋友问生产频繁发生full gc,如果不执行dump内存快照怎么定位?回想起来前段时间生产有个项目频繁执行full gc 最终oom,最终发现是有个新同事进行代码重构时sql写错了。原先sql 查询记录 id in (xx,xx) 他写成 not in (xxx) 导致大量结果集分析: 常规套路都会dump内存快照分析。这种不允许定位方式周期较长,且生产一般不允许直接dump。其实我们可以换种思路,是不是可以使用排除法定位?哪些场景会产生full g...
2021-11-07 22:24:25
237
原创 elasticsearch 开发笔记
前言最近接触elasticsearch 使用聚合功能遇到了些问题,今天总结记录一下记个笔记。需求大致是这样的要根据合作方及调用的接口分组展示出api调用图表折线图,可以根据年份月份天小时展示不同维度。由于之前调用记录已经存入es了,所以想从es统计出来。于是有了下面的辛酸历程,日志大概记录了以下信息问题1 如何根据多个字段分组统计,经过查询资料发现,可以使用script方式拼接出一个字段{ "size":0, "query":{ "bool":{ ..
2021-10-27 10:48:45
629
原创 rabbitmq 延时队列踩坑记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言 开发项目中,我们可能存在这个场景。比如订单创建30分钟未支付自动超时取消,也可能存在调用第三方接口不是实时响应结果,需要间隔一些时间获取处理状态。往往解决这些场景的技术手段无外乎于两种,1 定时任务调度 2 延时队列。鉴于定时任务实时性不好控制,往往使用延时队列来实现处理。 JDK ...
2021-10-26 14:51:04
3118
原创 canal docker 环境搭建
canal 是什么?官网https://github.com/alibaba/canal/canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。基于日志增量订阅和消费的业务包括...
2021-06-21 20:04:05
416
原创 excel 使用
前言作为一个后台开发,修复数据这种活是少不了的。有时候给一份excel文件,比较简单就可以使用函数来生成相应的修复sql。也能方便辅助我们排查问题一、VLOOKUP查找某列种的数据在另一列是否存在,结合IFERROR 函数更加直观VLOOKUP(lookup_value, table_array,col_index_num, [range_lookup])解释:lookup_value: 指的是要查询的某个值。如A2table_array: 指的是要查询的列。如H...
2021-06-08 14:39:36
348
原创 redis redisObject初识
redis 基于简单动态字符串、双端链表、字典、压缩列表、整数集合、跳跃表等数据结构提供了多种数据类型(string、list、hash、set、zset),不同的数据类型都有不同的适用命令。例LPUSH 和 LLEN只能用于列表类型的键,DEL、 TTL 和 TYPE, 可以用于任何类型的键, 要正确执行这些命令就需要根据当前类型执行不同的处理方式,删除String 类型 跟删除 list过程就不同。另外当列表类型元素的大小及个数的变更,redis对其进行优化也会使得对象的类型及编码格式发生变化
2021-05-26 15:53:43
185
原创 IDEA中设置Run Dashboard
微服务启动有很多工程Dashboard 界面如下开启 Run Dashboard 步骤(View->Tool Windows->Run Dashboard)若是没有Run Dashboard ,则在工程目录下找.idea文件夹下的workspace.xml<component name="masterDetails"> <states> <state key="ArtifactsStructureConfigurable.U..
2021-04-19 17:56:40
230
原创 spring mvc fastjson 自定义时间序列化无效
fastjon 默认序列化时间是时间戳,之前与spring mvc 集成 。一直运行的好好的,今天发现忽然不行了。不知道是不是被替换过版本原先配置如下 @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); fas
2021-04-07 18:00:35
543
1
原创 java 递归构造父子菜单
[ { "children":Array[2], "id":1, "name":"广东", "pid":0 }, { "children":[ { "children":[ { "children":Array[0], .
2020-11-24 09:17:47
977
1
原创 mysql 排名
接到一个数据排名需求,查阅资料mysql 8.0 自带排名函数 RANK ,DENSE_RANK ,ROW_NUMBER。令人遗憾的是我们数据库使用的是5.7,只能自己实现排序功能了。废话不多说,直接撸起来。简易数据如下表id order_no user_id create_time 2 18042810310873554715933 1001 2018-04-28 10:31:20 4 18042811031407055348562 1002
2020-11-13 14:15:23
205
原创 apache HttpClient 忽略证书
TrustStrategy acceptingTrustStrategy = new TrustSelfSignedStrategy(); SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy) .build(); SSLConnectionSocke.
2020-11-10 11:18:25
807
原创 mysql GROUP_CONCAT 排序问题
使用GROUP_CONCAT发现本地执行的结果跟测试环境不同,查询资料原来GROUP_CONCAT也可以进行排序。语法 GROUP_CONCAT( id ORDER BY id asc)
2020-09-22 10:50:55
983
原创 spring boot mongodb 笔记
本例基于spring-data-mongodb 1.10.4 版本@Repositorypublic interface AttachmentDao extends MongoRepository<Attachment, String> { List<Attachment> findByTypeAndName(String type, String name);}PageRequest总结下遇到的问题,1 PageRequest 分页p..
2020-08-04 10:06:23
483
原创 zip4j带密码压缩文件
public class ZipUtils { private ZipUtils() { } public static ZipFile zip(List<File> fileList, String zipPath, String pwd) { try { ZipParameters para = new ZipParameters(); //设置压缩方式,默认是COMP_DEFLATE .
2020-06-08 18:09:16
705
1
原创 Cron 获取下一次执行时间
@Slf4jpublic class CronUtil { private CronUtil() { } public static CronTrigger getCronTrigger(String cron) { if (!CronExpression.isValidExpression(cron)) { throw new...
2020-04-30 13:22:31
2086
原创 spring boot websocket 集群环境处理
开发中迎来一个功能重构,需要在后台系统给指定用户发送whatsApp消息。验证用户关系,用户回复后进行其他提问。原先开发这个功能负责人是基于轮询实现,看着频繁刷mongodb的日志心里不爽,决定尝试使用websocket 进行推送。 通常实现websocket 方式有几种原生注解,spring 封装,及netty实现。具体实现可以参考下此文https://www...
2020-04-21 11:10:49
1172
原创 Spring Controller获取ResponseBody 对象
心血来潮想全局打印一下Controller请求入参,及返回。原本以为可以通过HandlerInterceptorAdapter 拦截器获取,但是postHandle 不能获取返回类型是JSON的,ModelAndView 这种倒是可以获取。 public void postHandle(HttpServletRequest request, HttpServletResponse res...
2020-03-24 16:58:24
1552
原创 自定义注解拦截器对整个Controller拦截
通过自定义注解拦截,一般注解都在方法上标注。有时候,整个Controller都需要拦截,一个个加觉得怪麻烦的。那么我们生命注解时可以让注解作用在类上。@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interfa...
2020-03-20 11:20:32
1462
原创 java spring HandlerMethodArgumentResolver 自定义接收各种类型参数
spring 自带@requestParam @requestBody注解可以很方便将参数填充到相应的实体类,但是应用场景不同。其实本质还是由于不同的Content-type ,传输方式不同。json 就是body传参平常请求contentType 一般为"application/x-www-form-urlencoded"提交json类型一般都需要设置 application/json...
2020-03-20 10:56:28
543
原创 logback 日志交易ID设置
撸过后端都知道,日志很宝贵。定位问题离开不了,所以搜索日志在所难免。有时候需要搜索一个请求下的,所有日志。这搜索起来就比较吃力了。有没有啥好的方式呢?答案是有的,logback MDC可以设置一个交易Id。打印的时候就能输出,到时候搜索这个id就可以。参考了一些资料https://www.liangzl.com/get-article-detail-596.htmlht...
2020-03-13 15:05:58
797
原创 dubbo 接口调用部分字段丢失问题
今天偶然发现,通过dubbo接口调用发现某个字段是空的。第一反应是不是没有设置值,查看服务端代码,是设置值了的。这就奇了怪了。怀疑人生啊,我反复去看返回实体类,发现那个类继承了另外一个类。而且那个为空的字段,在父类也定义了。猜想是不是这个原因导致的,移除子类的该字段,正常了。我擦 ,这是什么鬼,只能去查资料了。 dubbo默认使用的序列化方式是hession-- 序列化...
2020-02-19 16:55:24
2633
1
原创 校验时间格式
public boolean isValidDate(String str,String pattern) { try { if(str.length()!=pattern.length()){ return false; } SimpleDateFormat format ...
2019-12-30 14:07:54
399
原创 fastjson 首字母大写问题
新建fastjson.properties 放入resources目录,fastjson.propertiesfastjson.compatibleWithFieldName=truefastjson.compatibleWithJavaBean=true
2019-12-18 10:34:30
789
原创 httpClient https 忽略证书
SSLContextBuilder builder = new SSLContextBuilder(); builder.loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true); SSLConnectionSocketFactory soc...
2019-11-18 10:35:23
1998
原创 RestTemplat post 查询参数设置异常
收到一个api文档接口,调用起来跟常规有些不同。需要再url上传参,还要在body传参。真是第一次见识到,参数都是json格式,也不知道这样设计的初衷是啥?接到了就干呗。 直接在url上拼接参数,https://xx?object=[{"createdBy":"one","createdDate":"2019-11-14 14:17:37","price":"88...
2019-11-14 16:40:02
466
原创 org.springframework.amqp.AmqpException: No method found for class java.lang.String
今天被告知测试环境,硬盘不够了。发现一个项目一直在打印日志,我勒个去,一看日志原来是rabbitMq一直在循环打印日志。怪事年年有,今年特别多。以前都是好好的,今天就见了鬼。出来问题只能找资料了。 集成方式用的spring-boot-starter-amqp ,没做其他定制化额外配置,百度了一圈发现别人也遇到过。见https://www.bbsmax.com/A/KE5Qy...
2019-10-28 18:58:56
3386
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人