org.hibernate.exception.JDBCConnectionException: невозможно получить соединение JDB C - PullRequest
0 голосов
/ 06 мая 2020

Иногда я замечаю указанную ниже ошибку в журналах моих приложений Springboot.

org.hibernate.exception.JDBCConnectionException: невозможно получить JDB C Connection

I подозреваю, что это могло быть из-за исключения из метода @Transactional (правда, только иногда).

Можно ли выбросить исключение из метода @Transactional? или это плохая практика?

Вот мой код уровня обслуживания

@Override
  @Transactional
  public void updateMessageStatus(String status, String sid, String errorCode) throws NotFoundException {

    OutgoingMessage outgoingMessage = outgoingMessageRepository.findByResourceSid(sid);
    if (outgoingMessage == null) {
      throw new NotFoundException(ErrorCode.MESSAGE_NOT_FOUND, sid);
    }


    outgoingMessage.setStatus(status);
    outgoingMessage.setUpdatedTime(Calendar.getInstance().getTime());

    outgoingMessageRepository.save(outgoingMessage);
  }

1 Ответ

0 голосов
/ 22 мая 2020

Обычно это происходит, когда приложение простаивает дольше, чем время ожидания соединения сервера.

Таким образом, если соединение простаивало дольше, чем это значение времени ожидания, оно будет отключено сервером. По умолчанию Hibernate использует свою внутреннюю библиотеку пула соединений с базой данных,
сохраняя соединение открытым для повторного использования позже. Hibernate повторно использует простаивающее соединение, которое уже было разорвано сервером, поэтому мы получаем ошибку JDBCConnectionExceptionis.

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

 spring.datasource.validation-query=select 1
 spring.datasource.testOnBorrow=true

Возможно, потребуется увеличить размер пула ИЛИ Entity Manager необходимо закрыть после завершения транзакции.

 spring.datasource.hikari.maximum-pool-size=10.

Сообщите мне, сработало ли это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...