Я пытаюсь обновить свой существующий проект Spring Boot 2.7.x до Spring Boot 3.x.x. Я разобрал все, кроме этой ошибки при запуске приложения.
ПРИЛОЖЕНИЕ НЕ ЗАПУЩЕНО
Описание:
Для параметра 0 метода lockProvider в com.cox.config.ShedLockConfiguration требуется bean-компонент типа org.elasticsearch.client.RestHighLevelClient, который не может быть найден.
Действие:
Рассмотрите возможность определения bean-компонента типа org.elasticsearch.client.RestHighLevelClient в вашей конфигурации.
Процесс завершен с кодом выхода 0
Используемая версия Spring Boot — 3.0.0. Я знаю, что RestHighLevelClient устарел, но в документации говорится, что он все еще доступен в spring-data-elasticsearch.
Попытался обновить все зависимости для совместимости с Spring Boot 3.
Обновлять: Также появляется ошибка ниже для другого компонента с эластичным поиском, который я пытаюсь обновить до весенней загрузки 3.
ПРИЛОЖЕНИЕ НЕ ЗАПУЩЕНО
Описание:
Для параметра 2 конструктора в com.cox.service.esindex.EsIndexRefreshService требуется bean-компонент типа org.springframework.data.elasticsearch.core.ElasticsearchOperations, который не может быть найден.
Действие:
Рассмотрите возможность определения bean-компонента типа org.springframework.data.elasticsearch.core.ElasticsearchOperations в вашей конфигурации.
Похоже, что spring boot больше не создает bean-компоненты для устаревших методов/классов. Не могли бы вы помочь мне сопоставить каждый устаревший метод/класс с новым spring-data-elasticsearch
В документации прямо указано:
Старый устаревший RestHighLevelClient все еще можно использовать, но вам нужно будет явно добавить зависимость в свое приложение, поскольку Spring Data Elasticsearch больше не извлекает ее автоматически:
Изменить 18.02.2023:
Ознакомьтесь с документацией в ней также описано, как настраивать различные клиенты. Вам придется выполнить эту настройку самостоятельно, я не думаю, что Spring Boot настроит это автоматически, они используют текущий материал из Spring Data Elasticsearch.
Однако мой кластер elasticsearch находится на удаленном сервере с хостом https, который отказывается подключаться с этой ручной конфигурацией. До этого весеннего обновления загрузки spring автоматически создавал RestHighLevelClient без какой-либо настройки и успешно подключался к удаленному https elasticsearch. Если вы знаете какие-либо возможные способы решения этой проблемы, дайте мне знать.
Получение ошибки ниже. Вызвано: java.net.UnknownHostException: такой хост не известен (https://[url эластичного поискового узла]:9200) в java.base/java.net.Inet6AddressImpl.lookupAllHostAddr (собственный метод) в java .base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933) в java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1529)
Хорошо, я решил эту ошибку, добавив параметр .usingSsl(), однако по умолчанию он добавляет 9200, что вызывает ошибку тайм-аута. Мне не нужно добавлять номер порта в URL-адрес моего кластера elasticsearch. Любая идея, как добиться такого поведения?
Добавить порт 443?
Спасибо, что добавление 443 в качестве порта обеспечивает успешное подключение к эластичному поиску. Но теперь столкнулся с другой ошибкой, для которой я поднял еще один вопрос здесь: stackoverflow.com/questions/75528682/…
Я добавил следующую зависимость в соответствии с документом, но все равно появляется та же ошибка. Должен ли я добавить какую-либо конфигурацию для автоматического предоставления bean-компонентов? <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.17.6</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>