【发布时间】:2020-01-04 21:07:53
【问题描述】:
每次使用spring JdbcTemplate,它是否真的会创建一个到sql server的新连接?
【问题讨论】:
标签: sql spring spring-jdbc jdbctemplate
每次使用spring JdbcTemplate,它是否真的会创建一个到sql server的新连接?
【问题讨论】:
标签: sql spring spring-jdbc jdbctemplate
理解数据源接口是理解这个问题答案的关键。 JdbcTemplate 依赖于数据源,DataSource 接口的官方 javadoc 说:
数据源是一个工厂,用于连接到此数据源对象所代表的物理数据源。
这意味着每次使用 JdbcTemplate 执行 SQL 查询时,它都会从数据源请求连接。数据源从连接池中检索连接(如果可用),并将其提供给 JdbcTemplate。 JdbcTemplate 然后执行 SQL 查询并将连接释放回池。
所以,是的,每次使用 JdbcTemplate 来执行 SQL 查询时,我们都需要一个新连接,但该连接总是从任何 Datasource 接口实现所维护的连接池中获取。
维护连接池比按需创建新连接更省时。显然,考虑到内存限制,连接池大小必须有一个上限。
【讨论】:
答案 1:
简而言之,它确实关闭了连接。长答案取决于。
当你没有 Spring 托管事务时,是的,JdbcTemplate 将调用 Connection 上的 close() 方法。但是,如果由于 Springs 事务管理关闭而已经有一个可用的连接,则该连接将由 Springs 事务支持处理,这反过来也会在 Connection 上调用 close()。
唯一的区别是连接关闭但 close() 将被调用。
连接是否真正关闭取决于使用哪个DataSource,一般来说,当使用连接池时,连接将返回池中,而不是实际关闭连接。
答案 2:
是的。
如果连接是从连接池中获得的,它实际上不会关闭连接,而是将其发送回连接池。
答案 3:
无需手动关闭连接。 Spring容器本身采取的操作。请参考这个春季网址,
http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html
答案 4:
我们也可以在使用 jdbcTemplete 时关闭连接,在某些情况下执行查询后必须关闭连接,否则会出现连接问题。欲了解更多详情,请访问 [在jdbc模板中关闭连接][1][1]:http://www.javaiq.in/2019/05/jdbctemplate.html
【讨论】: