提问者:小点点

HikariCP自动提交的用法是否与常规java连接自动提交的用法相同?


我最近使用了HikariCP。在我使用自己的简单连接池来满足我们的需求之前。在我们的软件中,有时我们需要执行多个数据库插入,其中每个插入都取决于一些验证。或多或少与此网站的样本相似:http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions

在我的旧方法中,当我使用自己的conn池时,我总是将连接对象设置为setAutoCommit(false),然后再将其提供给请求对象,以便数据库管理器可以在出现问题时手动回滚数据。就像在示例中一样,如果try捕获任何异常,它将调用回滚函数。当我返回连接时,我调用连接返回中的connection.commit(),并在连接池管理器中将自动提交设置回true。

我的问题是:HikariCP是否仍然使用相同的程序来满足我的需求?也就是说,将autocommit设置为false(我阅读了手册,您的配置中有autocommit参数),然后我们只需手动回滚或提交事务,然后返回池?或者,如果我没有将配置参数设置为Autocommit=false,那么我们是否可以自动抛出异常,HikariCP会在出错时自动调用回滚,或者在连接返回时调用commit?

感谢您提供的任何信息。伦德拉


共1个答案

匿名用户

HikariCP自动提交行为与没有池的情况相同。如果autoCommit=false,则您负责在try finally中提交/回滚。因此,是的,您只需提交/回滚,然后返回到池的连接。

事实是,如果autoCommit=false,并且您在不提交的情况下运行查询,那么HikariCP将在返回到池时自动回滚。然而,这是为了安全,我不鼓励您基于这种行为进行编码。如果您选择切换池,这样做会降低代码的可移植性。