Весенняя загрузка, ожидающая запуска Elasticsearch

#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. Проверьте обновленный ответ.