Spring在提交事务后会关闭连接吗?

5

我最近在一篇教程中读到,Spring会在事务提交后关闭连接。

这是真的吗?我在Spring参考文档中找不到相关信息。

这背后的原理是什么?迄今为止,我认为连接和事务之间存在一对多的关系。

2个回答

10

当事务结束时,Spring会调用close()方法,这可能是提交(commit)或回滚(rollback)触发的。close()方法是否实际关闭了真实的JDBC连接取决于DataSource配置。如果是普通的JDBC连接,则会实际关闭。如果是连接池,则在关闭时它可能只会被返回到池中。


1
谢谢您的回复,您能告诉我哪个Spring类正在关闭连接吗? - woof-woof
看一下 org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection()。这个方法被 DataSourceTransactionManager.doCleanupAfterCompletion() 和 TransactionSyncronization 处理器所调用。 - AngerClown
Spring如何确定DataSource是否为连接池? - user64141
@user64141:这并不是这样的:一个池通常会创建一个数据源,其中返回的任何连接都被包装 - 这个包装器覆盖了 .close() 方法,以便不是真正关闭底层(包装的)连接,而是将连接返回到池中。 - stolsvik

0
不,只有当 SessionFactory bean 被销毁时连接才会关闭。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接