dubbo反序列化导致Timestamp丢失时分秒,怎么办
时间: 2023-07-18 14:21:32 浏览: 204
这个问题是由于dubbo默认使用了Hessian2进行序列化和反序列化,而Hessian2对于java.sql.Timestamp类型的序列化存在问题,会导致反序列化后的对象中Timestamp的时分秒丢失。解决这个问题的方法是使用其他的序列化方式,比如使用Java的标准序列化方式或者使用JSON进行序列化和反序列化。具体的做法如下:
1. 使用Java的标准序列化方式
在dubbo的配置文件中,将序列化方式改为Java自带的序列化方式:
```
<dubbo:protocol name="dubbo" serialization="java" />
```
2. 使用JSON进行序列化和反序列化
在dubbo的配置文件中,将序列化方式改为fastjson或者jackson:
```
<dubbo:protocol name="dubbo" serialization="fastjson" />
```
或者
```
<dubbo:protocol name="dubbo" serialization="jackson" />
```
其中,fastjson和jackson都是常用的JSON序列化库。使用JSON进行序列化和反序列化可以避免Hessian2对于Timestamp的序列化问题,同时还可以提高序列化和反序列化的性能。
相关问题
dubbo序列化开销
Dubbo支持多种序列化算法,包括Java原生序列化、Hessian2、JSON、FastJSON、Kryo、FST、Protobuf等。其中,Java原生序列化是最慢的,序列化后的二进制流也是最大的;而Hessian2序列化之后的二进制流大小大约是Java序列化的50%,序列化耗时大约是Java序列化的30%,反序列化耗时大约是Java序列化的20%。因此,在Dubbo中,推荐使用Hessian2序列化,它是Dubbo默认使用的序列化方式,也是性能最优的序列化方式之一。
另外,Dubbo为了支持多种序列化算法,单独抽象了一层Serialize层,在整个Dubbo架构中处于最底层,对应的模块是dubbo-serialization模块。这个模块提供了通用的序列化和反序列化接口,可以方便地扩展和替换序列化算法。
<<相关问题>>:
1. Dubbo支持哪些序列化算法?
2. Hessian2序列化的优点有哪些?
3. Dubbo的Serialize层有什么作用?
ConcurrentHashMap dubbo序列化 Float变成Double
在Dubbo序列化过程中,如果使用了ConcurrentHashMap,那么在反序列化时可能会出现Float变成Double的情况。这是因为ConcurrentHashMap在序列化时会将Float类型的数据转换成Double类型,而在反序列化时又会将Double类型的数据转换成Float类型。这个问题可以通过在Dubbo配置文件中添加以下配置来解决:
```xml
<dubbo:protocol serialization="kryo"/>
```
这样就会使用Kryo序列化方式,避免了ConcurrentHashMap序列化时的问题。
阅读全文