手动创建SolrCrudRepository

时间:2014-03-26 23:30:25

标签: java spring solr spring-data

参考this article

我想使用自己的SolrTemplate手动设置存储库。这是因为我有多个Solr运行实例,我想为它们中的每个实例提供一个repo。这是我的所作所为:

Bean定义:

<bean id="currencySolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
    <constructor-arg value="${solr.server.currency.url}" index="0"/>
</bean>

<bean id="currencySolrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
    <constructor-arg index="0" ref="currencySolrServer"/>
</bean>

我有一个非常基本的存储库:

@Component
public interface CurrencyRepository extends SolrCrudRepository<SolrInputDocument, String>
{
}

服务类:

@Service
public class SolrService
{
  @Resource
  @Qualifier("currencySolrTemplate")
  SolrTemplate currencySolrTemplate;
  private CurrencyRepository repository;

 /*init the repo*/
  @PostConstruct
  public void init()
  {
    log.debug("Creating SolrRepository");
    repository = new SolrRepositoryFactory(currencySolrTemplate)
    .getRepository(CurrencyRepository.class);
    log.debug( "SolrRepositiory created" );
  }
}

根据引用的文章,Bob是我的叔叔,但是,它在init()方法中爆炸了:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CurrencyRepository': Cannot resolve reference to bean 'solrTemplate' while setting bean property 'solrOperations'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'solrTemplate' is defined

右。约定优于配置。为什么CurrencyRepository仍然在寻找对默认SolrTemplate的引用,尽管我已经给它自己的currencySolrTemplate

1 个答案:

答案 0 :(得分:1)

发现它!我的上下文文件中有一个旧行:

<solr:repositories base-package="com.sundberg.solr.repository"/>

这不知何故导致repo寻找默认的solrTemplate。删除此行解决了这个问题。请随意分享一下这一点。总的来说,Spring的Solr框架的文档并不是很全面。