2015-04-24 75 views
0

我在配置彈簧數據elasticsearch時遇到問題,我按照這裏提到的步驟Spring bean configuration for Crud Repositories。但我得到的錯誤:Spring數據彈性搜索CRUD配置

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerRepo': Cannot resolve reference to bean 'elasticsearchTemplate' while setting bean property 'elasticsearchOperations'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchTemplate' defined in class path resource [spring-repository.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.data.elasticsearch.core.ElasticsearchTemplate]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z

下面是代碼:

CustomerService.java

@Service 
public class CustomerService { 
@Resource 
CustomerRepo custRepo; 

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

Customer.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); 
} 
} 

彈簧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> 

彈簧的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" /> 

我不知道爲什麼它不工作。請幫助我。

回答

0

它的工作最後,修改這些文件之後:

1)彈簧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。