Как обрабатывать исключение MySQL CommunactionException, возникающее при отключении базы данных при запуске приложения

#java #mysql #spring #spring-boot #jdbc

#java #mysql #spring #весенняя загрузка #jdbc

Вопрос:

Приложение Spring Boot использует MySQL C3p0 DataSource .
Этот источник данных я использую для работы с JDBC и JPA (спящий режим провайдера).

В каждом методе уровня DAO JDBC у меня есть исключение SQLException try / catch. И этот блок catch действительно улавливает это исключение связи, но..

Но когда я пытаюсь so отправлять запросы все чаще и чаще, у меня возникает этот stacktrace.

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

 Caused by: java.net.ConnectException: Connection refused: connect
  

много деталей..

И, наконец ,я перехватываю в блоке перехвата SQLException:

 java.sql.SQLException: Connections could not be acquired from the underlying database!
  

Перед этим сообщением приложение выглядело так, как будто оно не может подключиться, и оно знает об этом.
Он очень быстро выдает ответы с кодом состояния 500.

После этого сообщения приложение выглядит так, как будто оно пытается подключиться и не может понять, что у него не получается. В этом случае он выдает ответы очень медленно.

После включения базы данных приложение работает без перезапуска.

Комментарии:

1. Не могли бы вы поместить код некоторых ваших DAO и конфигурацию подключения к базе данных в Spring?

2. @JosemyAB конечно, вопрос обновлен

Ответ №1:

Трассировка большого стека может быть распечатана веб-сервером, на котором запущено ваше приложение. Возможно, это не из вашего кода. Вам нужно прочитать о вашем веб-сервере о том, как избежать такой печати трассировки стека.