2016-08-15 50 views
2

我在項目中使用Spring Boot 1.4,Spring Data JPA 1.10.2,Spring Data Solr 1.5.4和Solr 4.10.4。我的程序和Solr之間的通信目前工作良好。我可以使用SolrCrudRepository提供的方法save()findAll()在Spring Data Solr中創建自定義Solr查詢時的AbstractMethodError 1.5.4

當我嘗試將新的Querys添加到存儲庫時,會發生此問題。我試圖啓動Web應用程序時使用相同的錯誤這樣做的所有三個可用的方法(叫querys,查詢註釋和方法名),但所有的結果:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mySolrController': Unsatisfied dependency expressed through field 'mySolrService': Error creating bean with name 'mySolrService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySolrRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySolrService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySolrRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) 
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) 
at com.my.project.BackupApplication.main(BackupApplication.java:22) 

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySolrService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySolrRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1214) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) 
... 19 common frames omitted 

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySolrRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:522) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) 
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) 
... 31 common frames omitted 

Caused by: java.lang.AbstractMethodError: null 
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:435) 
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220) 
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266) 
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252) 
at org.springframework.data.solr.repository.support.SolrRepositoryFactoryBean.afterPropertiesSet(SolrRepositoryFactoryBean.java:91) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
... 43 common frames omitted 

我的程序存儲庫如下所示:

package com.my.project.repository.solr; 

import com.my.project.mapping.SolrEntry; 
import org.springframework.data.solr.repository.Query; 
import org.springframework.data.solr.repository.SolrCrudRepository; 
import org.springframework.stereotype.Repository; 

import java.util.List; 

@Repository 
public interface MySolrRepository extends SolrCrudRepository<SolrEntry, String> { 
    @Query(value = "channel:*?0*") 
    List<SolrEntry> findByChannel(String channel); 
} 

和映射類的SolrDocuments看起來是這樣的:

package com.my.project.mapping; 

import org.apache.solr.client.solrj.beans.Field; 
import org.springframework.data.annotation.Id; 

import java.util.UUID; 

public class SolrEntry { 

    @Id 
    @Field 
    private String id; 

    @Field 
    private String message; 

    @Field 
    private String channel; 

    @Field 
    private String user; 

    @Field 
    private String timestamp; 

    public SolrEntry(String channel, String user, String message, String timestamp) { 
     this.id = UUID.randomUUID().toString(); 
     this.channel = channel; 
     this.user = user; 
     this.message = message; 
     this.timestamp = timestamp; 
    } 
    //Getter and Setter omitted 
} 

SolrContext是這樣創建的:

package com.my.project.config; 

import org.apache.solr.client.solrj.SolrServer; 
import org.apache.solr.client.solrj.impl.HttpSolrServer; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.core.env.Environment; 
import org.springframework.data.solr.core.SolrOperations; 
import org.springframework.data.solr.core.SolrTemplate; 
import org.springframework.data.solr.repository.config.EnableSolrRepositories; 

import javax.annotation.Resource; 

@Configuration 
@EnableSolrRepositories(basePackages = "com.my.project.repository.solr", multicoreSupport = true) 
public class SolrContext { 

    static final String SOLR_HOST = "solr.host"; 

    @Resource 
    private Environment environment; 

    @Bean 
    public SolrServer solrServer() { 
     return new HttpSolrServer(environment.getRequiredProperty(SOLR_HOST)); 
    } 

    @Bean 
    public SolrOperations solrTemplate() { 
     return new SolrTemplate(solrServer()); 
    } 
} 

我跟着這個manual除了官方Spring Data Solr Manual配置這一點,而谷歌搜索的問題沒有找到一個解決方案。 在此先感謝您的幫助。

回答

0

經過一些試驗和錯誤,我找到了答案。似乎是Spring Boot 1.4和Spring Data Solr 1.5.4的一個問題。我降級到Spring Boot 1.3.7,它立即工作。