【问题标题】:Spring data elasticsearch CRUD configurationSpring数据elasticsearch CRUD配置
【发布时间】:2015-07-02 10:19:03
【问题描述】:

我在配置 spring data elasticsearch 时遇到问题,我按照这里提到的程序Spring bean configuration for Crud Repositories。但我收到错误:

线程“main”中的异常 org.springframework.beans.factory.BeanCreationException:错误 创建名为“customerService”的bean:资源注入 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“customerRepo”的 bean:无法解析对 bean 'elasticsearchTemplate' 同时设置 bean 属性 '弹性搜索操作';嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建在类路径中定义的名称为“elasticsearchTemplate”的bean 资源 [spring-repository.xml]:bean 的实例化失败;嵌套的 例外是 org.springframework.beans.BeanInstantiationException: 无法实例化 bean 类 [org.springframework.data.elasticsearch.core.ElasticsearchTemplate]: 构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z

代码如下:

客户服务.java

@Service
public class CustomerService {
@Resource
CustomerRepo custRepo;

public void save(Customer cust) {
    custRepo.save(cust);
}
}

客户.java

@Document(
        indexName = "Customer", type = "cust"
        )
public class Customer {

@Id
private String id;
private String name;

public Customer(String name) {
    this.name = name;
}

public String getName() {
    return this.name;
}
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}
}

CustomerRepo.java

public interface CustomerRepo  extends ElasticsearchRepository<Customer, String> {
}

MainClass.java

public class MainClass {
public static void main(String args[]) {
    ApplicationContext context =
            new ClassPathXmlApplicationContext(new String[] {"spring-customer.xml"});
    CustomerService cust = (CustomerService)context.getBean("CustomerService");
    Customer customer = new Customer("test_name");
    cust.save(customer);
}
}

spring-customer.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.elasticsearch" />

<import resource="spring-repository.xml"/>

</beans>

spring-repository.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
   xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch
   http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd
   http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

<elasticsearch:transport-client id="client" cluster-nodes="xx.xx.xx.xx:9200" />

<bean name="elasticsearchTemplate"
      class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
    <constructor-arg name="client" ref="client" />
</bean>

<elasticsearch:repositories
        base-package="com.elasticsearch.repositories" />

我不知道为什么它不起作用。请帮帮我。

【问题讨论】:

    标签: spring-data-elasticsearch


    【解决方案1】:

    修改了这些文件后终于成功了:

    1) spring-customer.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.elasticsearch.repositories" />
    
    <import resource="spring-repository.xml"/>
    <bean id="customerService" class="com.elasticsearch.CustomerService" scope="prototype" >
            <property name="custRepo" ref="custRepo"></property>
    </bean>
    </beans>
    

    2) 更改端口号。 spring-repository.xml 中从 9200 到 9300。因为 9200 用于 http,而 9300 用于节点到节点通信。

    3) 在 CustomerService.java 文件中为 custRepo 添加 getter 和 setter。

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 2019-02-23
      • 2016-05-21
      • 2014-02-03
      • 2018-01-17
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多