Java 注入的SolrTemplate资源未连接到HttpSolrServer
我正在使用带有自定义存储库功能的Spring data Solr 1.4来尝试实现本文所述的计数功能: 我正在使用配置为使用多核的Solr。我的常规存储库接口获取并使用正确的Java 注入的SolrTemplate资源未连接到HttpSolrServer,java,spring,solr,spring-boot,spring-data-solr,Java,Spring,Solr,Spring Boot,Spring Data Solr,我正在使用带有自定义存储库功能的Spring data Solr 1.4来尝试实现本文所述的计数功能: 我正在使用配置为使用多核的Solr。我的常规存储库接口获取并使用正确的SolrTemplate和SolrServer实例,但自定义存储库不会获取相同的模板实例。除了使用@Resource注入bean之外,我还尝试获取spring应用程序上下文并从中提取bean。在这两种情况下,我都得到了一个不知道我的核心是什么的solrServerbean引用,因此当查询试图在以下位置到达solr时失败:而不
SolrTemplate
和SolrServer
实例,但自定义存储库不会获取相同的模板实例。除了使用@Resource
注入bean之外,我还尝试获取spring应用程序上下文并从中提取bean。在这两种情况下,我都得到了一个不知道我的核心是什么的solrServer
bean引用,因此当查询试图在以下位置到达solr时失败:而不是
bean定义如下所示:
@Bean
@Scope(value=ConfigurableBeanFactory.SCOPE_SINGLETON)
public SolrServer solrServer() {
SolrServer server = new HttpSolrServer(solrServerUrl);
return server;
}
@Bean(name = "solrTemplate")
@Scope(value=ConfigurableBeanFactory.SCOPE_SINGLETON)
public SolrTemplate solrTemplate(SolrServer server) throws Exception {
SolrTemplate template = new SolrTemplate(server);
template.setSolrCore(mainCore);
return template;
}
我的测试是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SearchEngineApplication.class, loader=SpringApplicationContextLoader.class)
public class MainRepositoryTest {
@Autowired
private MainRepository mainRepository;
...
@Test
public void testCountResults(){
long count= citcMainRepository.count("red");
System.out.println("Found " + count + " results for the term red" );
assertTrue(count > 0);
}
}
测试总是失败:
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /solr/select
HTTP错误404
访问/solr/select时出现问题
当它应该到达的正确url是/solr/select/myCore
关于我在这里可能误解了什么,有什么建议吗?
欢迎回复
--Griff通过创建第二个相同类型的bean并向其添加限定符,我自己能够解决这个问题 在我的SolrContext中,我定义了bean工厂和bean定义: @豆子 公共SolrServerFactory SolrServerFactory(){ 返回新的MultiResolrServerFactory(新的HttpSolrServer(solrServerUrl)); } 然后在我的UnitTest中对存储库进行如下限定: 公共类CITCMainRepositoryTest{
@Autowired
@Qualifier(value="mainRepo")
private MainRepository mainRepository;
@Test
public void testFindByLastName() {
List<SearchResponse> searchItems= mainRepository.findByLastName("Hunt");
assertTrue(searchItems.size() > 0);
}
...
@Autowired
@限定符(value=“mainRepo”)
私有主存储库主存储库;
@试验
public void testFindByLastName(){
List searchItems=mainRepository.findByLastName(“Hunt”);
assertTrue(searchItems.size()>0);
}
...
}
希望这对其他人有帮助
--Griff通过创建第二个相同类型的bean并向其添加限定符,我自己能够解决这个问题 在我的SolrContext中,我定义了bean工厂和bean定义: @豆子 公共SolrServerFactory SolrServerFactory(){ 返回新的MultiResolrServerFactory(新的HttpSolrServer(solrServerUrl)); } 然后在我的UnitTest中对存储库进行如下限定: 公共类CITCMainRepositoryTest{
@Autowired
@Qualifier(value="mainRepo")
private MainRepository mainRepository;
@Test
public void testFindByLastName() {
List<SearchResponse> searchItems= mainRepository.findByLastName("Hunt");
assertTrue(searchItems.size() > 0);
}
...
@Autowired
@限定符(value=“mainRepo”)
私有主存储库主存储库;
@试验
public void testFindByLastName(){
List searchItems=mainRepository.findByLastName(“Hunt”);
assertTrue(searchItems.size()>0);
}
...
}
希望这对其他人有帮助
--格里夫