#java #spring #spring-boot #docker #elasticsearch
#java #весна #spring-boot #docker #elasticsearch
Вопрос:
Я использую Spring Boot (2.3) и Elasticsearch (7.14.1) в настройке Docker. Я всегда использовал depends_on
в своем docker-compose.yml для ожидания Elasticsearch перед запуском приложения Spring Boot. (Теперь, когда это удалено в docker 3. *!?! это не сработает.)
-> Как я могу проверить доступность Elasticsearch перед инициализацией моего приложения Spring Boot?
- Могу ли я сделать это с помощью Spring-jdbc DatabaseStartupValidator ?
- Могу ли я сделать это с помощью проверок работоспособности Docker?
К вашему сведению: приложение работает регулярно при запуске через docker-compose. Spring просто несколько раз выходит из строя и перезапускается до тех пор, пока все репозитории ES не будут инициализированы.
Комментарии:
1. Это не проблема в docker compose, поскольку ваш контейнер spring app просто перезапускается, пока ему не удастся подключиться к elasticsearch. Для производственных кластерных сред вы также можете зависеть от
restart-on-failure
того, добавляете ли вы зонд готовности (например, в файле развертывания kubernetes), который будет пытаться подключиться к elasticsearch.2. Я знаю об этом. Это просто сильно загрязняет журналы и является распространенной проблемой, если у вас несколько служб.
Ответ №1:
Используйте функцию ожидания для отслеживания готовности вашей службы elasticsearch перед запуском приложения. Пример создания файла bash:
#!/bin/bash
set -e
./wait-for-it.sh -t 10 <your elasticsearch service>:9200
exec <your application>
Ваш Dockerfile может выглядеть так:
COPY . ./
RUN chmod x ./wait-for-it.sh ./<your bash file>.sh
ENTRYPOINT ["./<your bash file>"]
Комментарии:
1. Как я могу включить это в свой файл docker-compose?
2. Проверьте обновленный ответ.