【问题标题】:java connection pool and autocommit statusjava连接池和自动提交状态
【发布时间】:2021-06-01 23:24:25
【问题描述】:

我找不到答案的快速问题。如果您有一个连接池,其中某些连接可能已设置为自动提交 false。如果这些被返回并从池中检索。自动提交是否设置回 true(默认)?还是我可以在一种或另一种模式下建立一些联系?

【问题讨论】:

  • @S.Kadakov - 谢谢。进入 dbcp PoolableConnectionFactory 我看到当再次检索连接时,它将自动提交状态设置为默认值。所以至少和这个连接池是好的和一致的。

标签: java jdbc datasource dbcp


【解决方案1】:

行为正常的连接池应始终以相同的干净状态返回连接。假设 JDBC 规范中指定了默认值,则连接没有未完成的事务并且处于自动提交模式。

但是,从历史上看,这有点混乱,一些连接池在连接返回池时不会回滚未完成的事务,也不会重置当前的自动提交模式,或者它们需要显式配置为这样做。有些是出于性能原因这样做,但从纯 JDBC 的角度来看,这种行为是不正确的。

始终建议检查文档并验证(测试)数据源的行为,而不是盲目地依赖假设。

默认情况下,当返回连接(设置enableAutoCommitOnReturn)和回滚未完成的事务(设置rollbackOnReturn)时,DBCP 将调用setAutoCommit(true)。另见BasicDataSource Configuration Parameters

【讨论】:

  • 谢谢。是的,我是通过源码调试看到的。
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多