记一次ElasticSearch集成踩的小坑

背景:之前产品里面用到的ElasticSearch服务,是单独部署的服务。调用的时候是后端发送http请求es服务器,返回结果后再次查询数据库获取数据。为了减少不必要的http请求,故将es服务集成到后端服务中。在此记录一下

说做就做

ElasticSearch版本5.0.1
直接把es服务作为后端服务的module引入,启动服务。报错

Caused by: java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW
    at org.elasticsearch.common.xcontent.json.JsonXContent.<clinit>(JsonXContent.java:76)
    at org.elasticsearch.common.xcontent.XContentType$1.xContent(XContentType.java:58)
    at org.elasticsearch.common.settings.Setting.arrayToParsableString(Setting.java:698)
    at org.elasticsearch.common.settings.Setting.lambda$listSetting$26(Setting.java:656)
    at org.elasticsearch.common.settings.Setting$$Lambda$38/1908571316.apply(Unknown Source)
    at org.elasticsearch.common.settings.Setting$2.getRaw(Setting.java:660)
    at org.elasticsearch.common.settings.Setting.get(Setting.java:300)
    at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:164)
    at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:81)
    at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:106)
    at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:228)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:69)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:65)
    
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:310)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
    ... 146 more

看下报错位置代码

jsonFactory.configure(JsonFactory.Feature.FAIL_ON_SYMBOL_HASH_OVERFLOW, false); 

发现

com.fasterxml.jackson.core.JsonFactory.Feature.FAIL_ON_SYMBOL_HASH_OVERFLOW

要求的jar包是jackson-core-2.8.1.jar。网上随意查了一下,基本上定位到是jar包冲突导致。
直接上maven helper,分析有多少jar包冲突

image.png

发现冲突的jar包


image.png
image.png

分别引用高版本的jackson-core 并打成jar包,重新启动

Artifact is deployed successfully

下图为ElasticSearch版本5.0.1依赖的Jackson.core的版本


image.png

如果有做的不对的地方,随时欢迎指正!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,014评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,293评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,941评论 25 709
  • 没有人不愿意通过讲述释放自己的痛苦,而是讲述事实就像是有一个过滤器,有的人在乎讲出来的通畅,所以他无所不言,有的人...
    麻花可乐阅读 1,209评论 0 0
  • 2015年7月29日 15:53刷完微博略有感触的我 Z妹纸是个考研狗,却比我还关注找工作的事,一有点风吹草动恨不...
    努力吧可爱的女子阅读 1,079评论 0 1