当Elasticsearch后端离线时,如何处理Hibernate Search启动

时间:2019-04-03 10:37:49

标签: java elasticsearch hibernate-search

我正面临以下异常

  

“ org.hibernate.search.exception.SearchException:HSEARCH000103:无法   初始化名为IndexManager的IndexManager   'com.dnow.tvs.domain.entity.epc.MyEntity”

     在

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

     

...省略了37个常见框架

     

原因:org.hibernate.search.exception.SearchException:HSEARCH400007:Elasticsearch请求失败。   请求:带有参数{}的GET   响应:null

     

...省略了44个常见框架

     

由以下原因引起:java.util.concurrent.CompletionException:java.net.ConnectException:连接被拒绝:没有更多信息

     

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服务器实例未启动并正在运行。

因此,当弹性启动在应用程序启动或运行中的应用程序不可用时,如何处理后备。如何正常恢复此状态,以便Spring Boot应用程序可以在线或离线进行弹性搜索而无缝启动。

这是我的应用程序属性。

>   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 Search版本是5.10,elasticsearch版本是5.6.16。

我非常感谢您的帮助。让我知道其他所需信息。

1 个答案:

答案 0 :(得分:0)

如果要完全禁用休眠搜索,只需将hibernate.search.autoregister_listeners设置为false,并设置为explained in the documentation

如果您只想在启动时Elasticsearch集群关闭时禁用Hibernate Search,则Hibernate Search中没有此类功能。但是,您可以自己做。

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

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

我认为您唯一的选择是将index_schema_management_strategy设置为explained in the documentationnone

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

如果可行,您仍然必须以某种方式确保将Elasticsearch模式设置为Hibernate Search期望的设置。 HSEARCH-2366解决后,这可能会变得更容易,但是目前尚无任何简便的方法。也许使用index_schema_management_strategy设置为create来旋转应用程序的另一个实例?