在 Hibernate Search 之外重用 AwsSigningRequestInterceptor

问题描述 投票:0回答:1

我在使用 elasticsearch-aws 后端的 Spring Boot 2.7 项目中使用 Hibernate Search 6.2。效果很好。

现在我正在集成 elasticsearch-evolution 以进行架构迁移。为了在 elasticsearch-evolution 中重用 Hibernate Search 的 AWS 签名机制,我尝试将

AwsSigningRequestInterceptor
挂接到 RestClientBuilder 的
setHttpClientConfigCallback
中(如其自述文件中所述)。

由于

AwsSigningRequestInterceptor
不公开,我正在尝试利用
ElasticsearchAwsHttpClientConfigurer
。您是否有一些关于如何在 Spring 上下文中访问所需的
BeanResolver
ConfigurationPropertySource
的提示?正常注射是不行的。


解决方案:感谢@yrodiere,以下代码有效:

@Autowired
SessionFactory sessionFactory;

@Bean
public RestClient restClient() {
  SearchMapping mapping = Search.mapping(sessionFactory);
  Backend backend = mapping.backend();
  ElasticsearchBackend elasticsearchBackend = 
  backend.unwrap(ElasticsearchBackend.class);
  return elasticsearchBackend.client(RestClient.class);
}
hibernate-search hibernate-search-6
1个回答
0
投票

Hibernate Search 通过其自己的内部注册表(而不是通过 Spring DI)解析此特定 bean。我想你可以打电话给

new ElasticsearchAwsHttpClientConfigurer()

尽管说实话,您在这里处理的是内部代码,它可以(并且将会)随时更改其公开的构造函数/方法,因此这不是一个面向未来的策略。

我认为你最好的选择是检索 Hibernate Search 的 Elasticsearch 客户端并以某种方式让

elasticsearch-evolution
使用它。

如果不可能,您最好的解决方案可能是将相关代码复制粘贴到您的项目中,前提是您的项目的许可证与 Hibernate Search 自己的 LGPL 许可证兼容。否则,您可以使用改编的代码发布您自己的 LGPL 项目。

© www.soinside.com 2019 - 2024. All rights reserved.