我正在使用带有弹性搜索2.4.4的Spring Data Elastic Search 2.1.12.RELEASE。
我有以下代码:
elasticsearchTemplate.createIndex(indexName);
elasticsearchTemplate.addAlias(alias);
elasticsearchTemplate.putMapping(MyElasticEntity.class); //FAILS HERE!
我的实体是:
@Document(indexName = "psp", type = "payouts")
public class MyElasticEntity {
@Id
String id;
UUID payoutId;
// more fields of type UUID, enum, String, Instant and Long. Nothing unusual.
@Version
Long version;
}
我的代码在以上putMapping
中失败,并显示:
原因:java.lang.AbstractMethodError:在null处 org.springframework.data.mapping.context.AbstractMappingContext $ PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:552) 〜[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]在 org.springframework.data.mapping.context.AbstractMappingContext $ PersistentPropertyCreator.doWith(AbstractMappingContext.java:530) 〜[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]在 org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:729) 〜[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:398) 〜[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]在 org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:229) 〜[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]在 org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:172) 〜[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]在 org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:85) 〜[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]在 org.springframework.data.elasticsearch.core.ElasticsearchTemplate.getPersistentEntityFor(ElasticsearchTemplate.java:1094) 〜[spring-data-elasticsearch-2.1.12.RELEASE.jar:na]在 org.springframework.data.elasticsearch.core.ElasticsearchTemplate.putMapping(ElasticsearchTemplate.java:183) 〜[spring-data-elasticsearch-2.1.12.RELEASE.jar:na]在 psp.elasticsearch.ESReindexingResource.reindexPayouts(ESReindexingResource.java:60) 〜[classes /:na]在sun.reflect.NativeMethodAccessorImpl.invoke0(本机 方法)〜[na:1.8.0_172]在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 〜[na:1.8.0_172]在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 〜[na:1.8.0_172]在java.lang.reflect.Method.invoke(Method.java:498) 〜[na:1.8.0_172]在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) 〜[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 〜[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) 〜[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877) 〜[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) 〜[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) 〜[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) 〜[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] ... 86个常见框架 省略
似乎所使用的实现是org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext
类型,它的确定义了createPersistentProperty()
实现。
在Google周围搜索时,发现有关我的库版本不兼容的建议。我怀疑这是原因,但似乎找不到问题。
有人建议在我的pom文件中包括spring-data-commons
,但这没用(可能是因为我添加了错误的版本-无论如何,它已经通过传递依赖项存在了)。
如果我使用curl命令创建映射,然后仅添加文档,它就可以正常工作,因此肯定在我的Java代码(与我共享的代码一样简单)或依赖项中有问题。
任何想法如何解决或更好地调试它?