【发布时间】:2017-05-05 01:47:53
【问题描述】:
我们有一个 Spring Boot Restful API,它需要从 2 个不同的 Elasticsearch 实例(在不同的服务器上)获取数据,1 个用于“共享”数据(上面有大约 5 个不同的索引),1 个用于“私有”数据(有大约 3 个不同的指标)。目前仅针对“私有”数据实例运行,一切都很好。但我们现在需要获取“共享”数据。
在我们的 Spring Boot 应用程序中,我们启用了这样的 Elasticsearch 存储库
@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = {
"com.company.core.repositories", //<- private repos here...
"com.company.api.repositories" //<-- shared repos here...
})
public class Application { //... }
然后我们使用 ElasticsearchRepository 访问“私有”数据,例如:
package com.company.core.repositories
public interface DocRepository extends ElasticsearchRepository<Doc, Integer> { ... }
在我们的端点中,我们有...
@RestController
@CrossOrigin
@RequestMapping("/v2/statuses/")
public class StatusEndpoint {
@Resource
private ElasticsearchTemplate template;
@Autowired
private DocRepository docRepository;
@Autowired
private Validator validator;
//...
}
现在我们要添加另一个存储库,例如:
package com.company.api.repositories
public interface LookupRepository extends ElasticsearchRepository<Lookup, Integer> { ... }
然后在我们的 API 层中,我们将添加一个自动连接的实例...
@Autowired
private LookupRepository lookupRepo;
我们认为我们可以定义多个具有不同名称的 Bean,但是我们如何将每个“elasticsearchTemplate”bean 与需要它们的不同 ElasticsearchRepository 实例相关联?此外,我们如何将“私有”bean/配置与注入的实例关联
@Resource
private ElasticsearchTemplate template;
我们需要在哪里原生使用它?
【问题讨论】:
标签: java spring elasticsearch