我正面临以下异常
“ 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。
我非常感谢您的帮助。让我知道其他所需信息。
答案 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
设置为true
或false
取决于此。不过,请务必在请求中使用合理的超时,因为这将在每次启动应用程序时执行。
如果您要在启动期间 禁用对Elasticsearch集群的调用,但仍希望在保存实体或执行搜索时Hibernate Search能够完成其工作(因为您希望集群能够再次备份),那是另一个故事。
我认为您唯一的选择是将index_schema_management_strategy
设置为explained in the documentation到none
。
但这并不是真正受支持的功能,更多的可以尝试并可能起作用。
如果可行,您仍然必须以某种方式确保将Elasticsearch模式设置为Hibernate Search期望的设置。 HSEARCH-2366解决后,这可能会变得更容易,但是目前尚无任何简便的方法。也许使用index_schema_management_strategy
设置为create
来旋转应用程序的另一个实例?