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.