###遇到或解决的问题
1,需要告诉的序列化,且对大对象很友好
经过多次比对发现protostuff性能稳定,且对大对象很友好,速度相对稳定。
中间也考虑过用json,或者json2,但是作为一家老牌互联网公司历史上会有一些,不是很规范的写法,导致json无法使用,
比如泛型不明确:List<Object> ,List<Map>
最终选择了protostuff
2,兼容性
选择protostuff后面临兼容性的问题
a,不加tag的话,可能会有开发的同学将新增的属性发到类的上面,或者中间
b,加tag,也会面临其他的问题
比如我们敦煌作为大型互联网公司,且已经微服务化。会有很多个工程,同时依赖关系也相对复杂。
A工程的开发同学对dto字段加了属性但是忘记加tag。然后进行构建。
B工程现在正好构建,发版。但是B工程只改了一小点内容,甚至是一条日志打印,不可能要求他把所有的功能测试,或者单元测试都跑一遍。
但是由于A的(非法)修改导致B工程上线报错。
3,减少工作量
加tag作为一个机械性动作,带来的使用感觉不是很好
4,解决思路
在原有的protostuff基础上做了小的调整,有tag取tag值,没有tag计算一个值
5,junit测试类
NoAnnotatedFieldsTest
6,写到最后
我们公司内部使用的版本,有2个模式一个是上面介绍的。
另外一个模式是兼容以前老的版本,因为无法做到全公司同一时间升级jar包。
如果大家需要,我可以在当前基础上继续修改,将这个功能也囊括进来