Как справиться с запуском Hibernate Search, когда серверная частьasticsearch отключена - PullRequest
0 голосов
/ 03 апреля 2019

Я столкнулся со следующим исключением

"org.hibernate.search.exception.SearchException: HSEARCH000103: невозможно инициализировать 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] в

... 37 общих кадров пропущено

Причина: org.hibernate.search.exception.SearchException: HSEARCH400007: сбой запроса Elasticsearch. Запрос: GET с параметрами {} Ответ: ноль

... 44 общих кадра опущено

Вызвано: java.util.concurrent.CompletionException: java.net.ConnectException: в соединении отказано: дополнительная информация отсутствует

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

Это связано с тем, что мой экземпляр сервераasticsearch не запущен и работает.

Итак, как я могу справиться с аварийным восстановлением, когдаasticsearch недоступен при запуске приложения или во время работы приложения. Как изящно восстановить это, чтобы приложение весенней загрузки могло беспрепятственно запускаться либо в режиме онлайн, либо в автономном режиме.

Вот свойства моего приложения.

>   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, а версияasticsearch - 5.6.16.

Я действительно ценю помощь. Сообщите мне любую другую необходимую информацию.

1 Ответ

0 голосов
/ 03 апреля 2019

Если вы хотите полностью отключить Hibernate Search, вы можете просто установить hibernate.search.autoregister_listeners на false, как указано в документации .

Если вы хотите отключить Hibernate Search только тогда, когда кластер Elasticsearch выключен при запуске, то в Hibernate Search такой функции нет. Однако вы можете сделать это сами.

В этом разделе документации Spring Boot упоминается, что вы можете зарегистрировать компонент HibernatePropertiesCustomizer, который может настраивать свойства. Я полагаю, что вы могли бы зарегистрировать такой bean-компонент, и в реализации вы бы сами отправили запрос в кластер Elasticsearch, решили, будет ли он повышен или понижен на основе ответа, и установите hibernate.search.autoregister_listeners в true или false в зависимости от на что. Обязательно используйте разумный тайм-аут в своем запросе, поскольку он будет выполняться каждый раз при запуске приложения.

Если вы хотите отключить вызовы кластера Elasticsearch во время запуска , но все же ожидаете, что Hibernate Search выполнит свою работу, когда объект будет сохранен или будет выполнен поиск (поскольку вы ожидаете, что кластер будет еще раз), это другая история.

Я думаю, что единственным вариантом будет установить index_schema_management_strategy на none, как объяснено в документации 1024 *.

Но на самом деле это не поддерживаемая функция, это то, что вы можете попробовать и сработать.

Если это работает, вам все равно придется каким-то образом убедиться, что ваша схема Elasticsearch настроена на то, что ожидает Hibernate Search. Это может стать легче, когда HSEARCH-2366 решен, но сейчас нет простого способа сделать это. Может быть, раскручивать другой экземпляр вашего приложения с index_schema_management_strategy, установленным на create?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...