2016-01-07 3 views
0

Я забирающий соединение в JdbcTemplate в ниже способом: -Spring JdbcTemplate это требуется, чтобы закрыть соединение

getJdbcTemplate().getDataSource().getConnection() 

Нужно, чтобы закрыть соединение сгружен в указанном выше порядке? Весенний API JDBCTemplate утверждает, что закрытие соединений будет обрабатываться автоматически, поэтому я не уверен, что это происходит правильно.

http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html

+0

Этот код является неправильным. Зачем вы это делаете, при использовании 'JdbcTemplate' вам не следует возиться с самим соединением, используйте шаблон, вы работаете против него, а не используете его. –

+0

Это старый код, и он имеет проблемы с утечкой соединения, которые мне нужно отлаживать. – Abhi

+0

Как указано, код неверен. Если вы возитесь с самим соединением, вам нужно закрыть его. Либо перепишите код, чтобы правильно использовать 'JdbcTemplate', либо сделать старый try/catch/finally для управления ресурсами, который, в свою очередь, превосходит все цели присутствия' JdbcTemplate'. Вы не используете шаблон ... –

ответ

1

При получении DataSource от JdbcTemplate и использовать, чтобы получить Connection вы в основном полностью в обход JdbcTemplate. У вас теперь есть очень сложный способ получить новый Connection. Поскольку это соединение не управляется Spring, но вам также нужно закрыть его и применить обработку исключений.

Лучше использовать ConnectionCallback, чтобы получить Connection. Затем JdbcTemplate будет управлять Connection и выполнять всю обработку ресурсов.

getJdbcTemplate().execute(new ConnectionCallback<Void>() { 
    public Void doInConnection(Connection conn) { 
     // Your JDBC code here. 
    } 
}); 

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

Смежные вопросы