介绍
一、为什么有这个工具
传统序列化数据(jdk序列化,protbuf等协议) ,存储在缓存(redis,文件等)中无法直接解析,想要获取明文数据必须依赖原始DTO,并且必须实现序列化接口Serilizable,且serilizationUID必须相同,否则直接报异常。如果不同的序列化数据要实现转换,没有办法做到通用性。这大大提升了线上数据问题排查,跨系统接口对接的难度,而原生java没有提供相应的解决办法,所以需要用新的工具来解决。
二,这个工具是怎么实现的
ldl-DeserializationViewer,一款缓存序列化数据可视化查询和开发工具,采用javaassist和asm字节码生成技术,支持jdk等序列化协议(其他协议正在开发中)直接转换成json,而无需依赖定义源DTO类,无需依赖serializable接口及serialVersionUID。可用于线上运维序列化数据可视化,接口开发数据适配。支持种打包方式,springboot包:配合swagger通过web端访问;普通jar包:直接运行脚本,获取序列化数据可视化结果。
软件架构说明:
项目开源地址:https://gitee.com/luliang111222/ldl-DeserializationViewer
实现效果举例
JDK序列化数据源(乱码):
�� sr 1com.datalight.tools.deserialization.model.TestDto��c�� L idt Ljava/lang/Long;L namet Ljava/lang/String;L otherInfoq ~ xpsr java.lang.Long;��̏#� J valuexr java.lang.Number������ xp t 姓名t 学生
ldl-DeserializationViewer 反序列化引擎->json格式的直接转换:
{"id":1,"name":"姓名","otherInfo":"学生"}
三、springboot方式安装和使用
3.1 配置
不同环境redis服务的地址端口,如果redis设置了密码需配置密码;
在springboot项目的application.properties下指定window或linux的hostconfig.properties配置文件路径,server.port默认为8087可以修改,例如:
hostconfig.properties文件的内容示例如下:
其中DEV和TEST表示不同发布环境,可以根据需要进行添加;
#号后面是不同环境的访问地址和端口,如果是集群节点之间用逗号(,)隔开;
@符后面是对应单机或集群配置的密码,如果配置了密码需要设置,如果没配置可以为空;
3.2 打包
在项目路径的pom.xml文件启用spring-boot-maven-plugin打包插件,注释maven-assembly-plugin插件,使其生成springboot的服务包。
maven打包后生成deserialization-viewer-0.0.1-SNAPSHOT.jar
3.3 发布
把hostconfig.properties上传到对应服务的文件目录,如果目录不存在需要新建;
把deserialization-viewer-0.0.1-SNAPSHOT.jar上传到服务器目录,用shell命令进入该目录,执行java -jar redis-aliyun-0.0.1-SNAPSHOT.jar & 命令发布服务, &符表示后台运行。
3.4 使用
前端采用swagger页面,访问路径为http://ip:port/deserialization/swagger-ui.html#
四,控台方式的使用
4.1 配置
参考springboot的方式配置
4.2 打包
注释spring boot 打包插件,启用控制台打包
生成jar包如下:
4.3 使用
根据ip和端口号使用示例如下:
Java -jar .\deserialization-viewer-0.0.1-SNAPSHOT-jar-with-dependencies.jar 192.168.2.18:7004 testKey
192.168.2.18:7004 是redis服务器的地址和ip如果设置密码可以在后面跟@密码方式,参考springboot的方式;
testKey是要查询的redis的key。
根据环境配置使用示例如下:
Java -jar .\deserialization-viewer-0.0.1-SNAPSHOT-jar-with-dependencies.jar TEST testKey
结语
目前本项目已完成Json和JDK反序列化和redis数据源的开发,其他序列化协议方式正在开发中,致力于提供不同序列化协议的数据转换中间件,及数据运维工具。
项目开源地址:https://gitee.com/luliang111222/ldl-DeserializationViewer