我最近使用HikariCP。在我使用自己的简单ConnectionPool来满足我们的需求之前。在我们的软件中,有时我们需要执行多个数据库插入,其中每个插入依赖于某些验证。或多或少类似于此网站的示例:http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions
以我的方式,当我使用自己的conn池时,我总是将连接对象设置为setAutoCommit(false),然后将其提供给请求对象,以便数据库管理器可以在出现问题时手动回滚数据。与示例中一样,如果try捕获了任何异常,那么它将调用回滚函数。当我返回连接时,我在连接返回中调用connection.commit()并在连接池管理器中将autocommit设置为true。
我的问题:HikariCP是否仍然根据我的需要使用相同的程序?意思是,将autocommit设置为false(我阅读了手册,你有配置的autocommit参数),然后我们只是手动回滚或提交事务然后返回池?或者是否有一些自动化完成,我们可以抛出异常,如果我没有为Autocommit = false设置配置参数,HikariCP会在出错时自动调用回滚或在连接返回时调用commit?
感谢您提供任何信息。 Rendra
答案 0 :(得分:1)
HikariCP自动提交行为与没有池的情况相同。如果autoCommit = false,则您负责try-finally中的提交/回滚。所以,是的,你只需提交/回滚然后将连接返回到池中。
事实是,如果autoCommit = false,并且您在没有提交的情况下运行查询,那么HikariCP将在返回池时自动回滚。但是,这是为了安全起见,我不鼓励您根据此行为进行编码。如果您选择切换池,这样做会降低您的代码的可移植性。