gpt4 book ai didi

java - 当elasticsearch后端离线时如何处理Hibernate Search启动

转载 作者:行者123 更新时间:2023-12-02 10:03:03 29 4
gpt4 key购买 nike

我面临以下异常

"org.hibernate.search.exception.SearchException: HSEARCH000103: Unable to initialize IndexManager named 'com.dnow.tvs.domain.entity.epc.MyEntity"

at org.hibernate.search.indexes.impl.IndexManagerGroupHolder.doCreateIndexManager(IndexManagerGroupHolder.java:198) ~[hibernate-search-engine-5.10.5.Final.jar:5.10.5.Final] at

... 37 common frames omitted

Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed. Request: GET with parameters {} Response: null

... 44 common frames omitted

Caused by: java.util.concurrent.CompletionException: java.net.ConnectException: Connection refused: no further information

org.hibernate.search.elasticsearch.client.impl.DefaultElasticsearchClient$1.onFailure(DefaultElasticsearchClient.java:123) ~[hibernate-search-elasticsearch-5.10.5.Final.jar:5.10.5.Final]

这是因为我的elasticsearch服务器实例没有启动并运行。

那么当应用程序启动时或运行应用程序期间elasticsearch不可用时,我该如何处理回退。如何优雅地恢复这一点,以便 Spring Boot 应用程序可以无缝启动,无论 Elastic Search 在线还是离线。

这是我的应用程序属性。

>   jpa:
> show-sql: true
> properties:
> hibernate:
> search:
> default:
> indexmanager: elasticsearch
> elasticsearch:
> required_index_status: yellow
> index_schema_management_strategy: drop-and-create
> host: http://127.0.0.1:9200

我确实浏览了官方的 hibernate 搜索文档,但无法识别解决方案或配置。

请注意我的 Hibernate Search 版本是 5.10,elasticsearch 版本是 5.6.16。

我真的很感谢你的帮助。让我知道所需的任何其他信息。

最佳答案

如果你想完全禁用Hibernate Search,你可以简单地设置 hibernate.search.autoregister_listenersfalse ,如explained in the documentation .

如果您只想在 Elasticsearch 集群启动时关闭时禁用 Hibernate Search,那么 Hibernate Search 中没有此功能。不过,您可以自己做。

This section of the Spring Boot documentation提到您可以注册 HibernatePropertiesCustomizer能够自定义属性的bean。我想你可以注册这样一个bean,在实现中你可以自己向Elasticsearch集群发送请求,根据响应决定它是启动还是关闭,并设置hibernate.search.autoregister_listenerstruefalse取决于那个。不过,请务必在请求中使用合理的超时,因为每次启动应用程序时都会执行该超时。

如果您想在启动期间禁用对 Elasticsearch 集群的调用,但仍希望 Hibernate Search 在保存实体或执行搜索时完成其工作(因为您希望集群再次站起来),那是另一个故事了。

我认为你唯一的选择是设置 index_schema_management_strategynone ,如explained in the documentation .

但这并不是真正受支持的功能,更多的是您可以尝试并且可能会起作用的功能。

如果它有效,您仍然需要以某种方式确保您的 Elasticsearch 模式设置符合 Hibernate Search 的预期。这可能会变得更容易一次HSEARCH-2366已解决,但目前没有任何简单的方法可以做到这一点。也许可以使用 index_schema_management_strategy 启动应用程序的另一个实例设置为create

关于java - 当elasticsearch后端离线时如何处理Hibernate Search启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55493135/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com