Spring Boot Service не запускается после запуска, потому что база данных MySQL еще не готова

Я установил приложение Spring Boot на свой сервер Ubuntu 16 в качестве службы init.d для автоматического запуска при запуске системы, как описано здесь.

У меня также есть база данных MySQL, которая мне нужна для приложения Spring Boot. Проблема в том, что приложение падает после того, как Spring boot пытается подключиться к базе данных:

2016-09-21 12:54:32.382 ERROR 1384 --- [           main] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_101]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_101]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_101]
...
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_101]
...
2016-09-21 12:54:32.384  WARN 1384 --- [           main] o.h.e.jdbc.internal.JdbcServicesImpl     : HHH000342: Could not obtain connection to query metadata : Communications link failure

Я думаю, это потому, что база данных MySQL еще не готова. Но это вызывает полный сбой Spring Boot App.

Когда я пытаюсь запустить тот же сервис вручную снова, все работает отлично.

Итак, мой вопрос, могу ли я определить какие-то зависимости init.d? Итак, мое весеннее загрузочное приложение ждет, пока база данных не будет готова?

1 ответ

Я использую systemd.

По вашей ссылке, в части:

[Unit]
Description=myapp
After=mysql.service

[Service]
User=myapp
ExecStart=/var/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Измените строку After, как я показываю, заменив syslog на mysql.

Другие вопросы по тегам