我正面临以下例外
“org.hibernate.search.exception.SearchException:HSEARCH000103:无法初始化名为'com.dnow.tvs.domain.entity.epc.MyEntity”的IndexManager
在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服务器实例没有启动并运行。
那么当应用程序启动时或运行的应用程序中没有弹性搜索时,如何处理回退。如何优雅地恢复这一点,以便弹簧启动应用程序可以无缝启动弹性搜索在线或离线。
这是我的应用程序属性。
> 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_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
设置为none
,就像explained in the documentation一样。
但它并不是一个真正受支持的功能,更多的东西你可以尝试并可能工作。
如果它有效,您仍然必须以某种方式确保您的Elasticsearch架构设置为Hibernate Search期望的内容。一旦HSEARCH-2366得到解决,这可能会变得更容易,但是现在没有任何简单的方法可以做到这一点。也许用index_schema_management_strategy
设置为create
来启动你的应用程序的另一个实例?