Spring Data ElasticSearch坑
2018-03-23 本文已影响0人
Gallrax
前篇
No1.正在搭建ES-MQ-Cache-Demo,该项目是以Spring Boot + Spring Data为核心架构开发。主要流程为通过AOP来记录用户日志,通过ActiveMQ Quene将日志放入消息队列,Consumer消费时将日志全文检索至ElasticSerach。
No2.用户能够正常操作,日志也能够正常记录。但是当通过API查询日志时发现报空指针异常。
测试()
image.png可以发现,数据是存在的
image.png
F9会发现抛了空指针异常,很郁闷,明明数据是有的,但是为什么会空指针呢?
查问题
测试发现数据是没有问题。很头疼,不如我们在这个方法同样记录一下日志,看返回值是否正常。
如果返回值正常,则我们测试是否为FastJson解析有问题,如果FastJson解析没有问题就再深入研究(理论上只可能是FastJson的问题)
@SysLog(日志记录AOP)
image.png
image.png
发现结果是正常返回的,那就手动序列化为Json
结果:好吧,空指针,说明是FastJson序列化的问题,那我们测试一下Jackson
image.png
结果:好吧,空指针,说明不一定是序列化的问题(出于对FastJson的不信任,所以拿Jackson测试一下证明)
那我们就深入一下,到底是哪里出了问题
经过debug发现,异常出现在这里
image.png
结果
因为查看日志信息,只能到达write方法,后续方法是ASM字节码组装而成,无法debug,但通过日志信息科一得到最终的异常是由于AggregatedPageImpl,这个类就是Spring Data Page类的子类AggregatedPageImpl,说明问题出在这个类上。希望以后注意
解决方法
1.自己封装Page类
2.page.getContent()