问题描述
我找不到答案的快速问题。如果您有一个连接池,其中某些连接可能已设置为自动提交 false。如果这些被返回并从池中检索。自动提交是否设置回 true(默认值)?还是我可以在一种或另一种模式下建立一些连接?
解决方法
行为正常的连接池应始终以相同的干净状态返回连接。假设 JDBC 规范中指定了默认值,其中连接没有未完成的事务并且处于自动提交模式。
然而,从历史上看,这有点混乱,一些连接池在连接返回池时不会回滚未完成的事务,也不会重置当前的自动提交模式,或者需要明确配置为这样做。有些人出于性能原因这样做,但从纯 JDBC 的角度来看,这种行为是不正确的。
始终建议检查文档并验证(测试)数据源的行为,而不是盲目依赖假设。
默认情况下,DBCP 将在返回连接(设置 setAutoCommit(true)
)和回滚未完成的事务(设置 enableAutoCommitOnReturn
)时调用 rollbackOnReturn
。另见BasicDataSource Configuration Parameters。