介绍
让我们考虑一下 Jdbi 3.27.0。
文档
请参阅Javadoc以了解该org.jdbi.v3.core.Jdbi#inTransaction(org.jdbi.v3.core.HandleCallback<R,X>)
方法:
交易中
public <R, X extends Exception > R inTransaction ( HandleCallback <R,X> callback) throws X
一个方便的函数,它管理句柄的生命周期并将其交给回调以供客户端使用。当回调被调用时,句柄将在一个事务中,如果回调正常完成,则该事务将被提交,如果回调引发异常,则该事务将回滚。
类型参数:
R
- 回调返回的类型
X
- 回调抛出的异常类型,如果有的话。
参数:
callback
- 在事务中接收打开句柄的回调
回报:
回调返回的值
抛出:
X
- 回调抛出的任何异常
请注意以粗体标记的文本,它应该回答您的问题:
当回调被调用时,句柄将在一个事务中,如果回调正常完成,则该事务将被提交,如果回调引发异常,则该事务将回滚。
抛出:
X
-回调抛出的任何异常
正如我们所看到的,没有声明声称异常处理行为取决于异常类型。
源代码
请将本节中提供的信息视为草稿:它可能很粗略(不精确)。
有一些测试涵盖了与交易相关的功能。
测试由TestTransactions
类表示:jdbi/TestTransactions.java at v3.27.0 · jdbi/jdbi。
请看一下整个测试班。
那么,请注意以下与异常相关的测试方法:
testExceptionAbortsTransaction()
.
testExceptionAbortsUseTransaction()
.
我们可以从这些测试方法的实现中检查:
- 实现使用
java.io.IOException
异常类型。
- 实现没有提到异常处理行为取决于异常类型。