Закрывает ли Spring JdbcTemplate соединение, если возникает исключение?

Когда Spring перехватывает SQLException, закрывает ли он подготовленный оператор, результирующий набор и/или соединение, прежде чем генерировать собственное исключение DataAccessException (время выполнения)?

У меня есть разработчик, который хочет создать аспект АОП, чтобы перехватывать эти исключения и регистрировать и/или закрывать соединение.

@AfterThrowing(pointcut="dataAccessOperation()", throwing="exception")
public void doRecoveryActions(JoinPoint thisJoinPoint, DataAccessException exception) {
     // log and/or close connection
}

person aakoch    schedule 23.02.2011    source источник


Ответы (2)


да.

В этом весь смысл JdbcTemplate — он обрабатывает все виды шаблонных действий, включая освобождение всех ресурсов. См. 12. Доступ к данным с помощью JDBC.

person axtavt    schedule 23.02.2011
comment
В документации описывается перевод исключений и говорится о закрытии соединений, но ничего конкретно не говорится о закрытии соединений при перехвате исключений. Вот почему я спросил это здесь. - person aakoch; 24.02.2011
comment
@Adam: Да, в этом случае документация кажется не очень подробной, но JdbcTemplate фактически заботится о закрытии соединений в случае исключения (хотя при использовании с транзакциями, управляемыми Spring, соединения фактически закрываются менеджером транзакций, но это не так) не имеет значения). - person axtavt; 24.02.2011
comment
Будет ли jdbctemplate также очищать и закрывать соединение в случае непроверенного исключения/исключения времени выполнения? - person tekumara; 15.11.2013
comment
Да - он поймает непроверенное исключение/исключение времени выполнения и закроет соединение, но только если это исключение не будет перехвачено выше в стеке. - person tekumara; 15.11.2013

Я думаю, что ваш разработчик должен взглянуть на управление транзакциями Springs возможности. Вы можете использовать АОП для получения рекомендаций по ведению журнала, поведению отката и даже retry или другие действия по обработке исключений, чтобы реагировать полностью декларативно.

person zoidbeck    schedule 23.02.2011