我有一个类似的密码:
jdbi.inTransaction(h -> {
Dao1 dao1 = h.attach(Dao1.class);
if(!dao1.somequery()) {
throw new CustomException("foobar");
}
// ... other statements
}我是否可以确定,如果抛出CustomException,jdbi将回滚事务,或者只在与SQLException或Jdbi相关的异常情况下发生这种情况?
发布于 2022-01-23 21:36:51
引言
让我们考虑Jdbi 3.27.0。
文档
请参阅Javadoc中的org.jdbi.v3.core.Jdbi#inTransaction(org.jdbi.v3.core.HandleCallback<R,X>)方法:
inTransaction public 异常>public HandleCallback callback)抛出X 一种方便的函数,它管理句柄的生命周期并将其输出给回调以供客户使用。当调用回调时,句柄将位于事务中,如果回调正常结束,该事务将被提交;如果回调引发异常,则该事务将被回滚。 类型参数: 回调返回的
R类型X-回调引发的异常类型(如果有的话)。 参数:callback-将在事务中接收打开句柄的回调 返回: 回调返回的值。 抛出:X-回调引发的任何异常
请注意以黑体字标明的案文,它应回答你的问题:
当调用回调时,句柄将位于事务中,如果回调正常完成,该事务将被提交,如果回调引发异常,则将提交回滚。抛出:
X-回调引发的任何异常
正如我们所看到的,没有语句声称异常处理行为依赖于异常类型。
源代码
请将本节提供的资料视为草案:可能是粗略的(不准确)。
有些测试涵盖与事务相关的功能。
测试由TestTransactions类:jdbi/TestTransactions.java,v3.27.0·jdbi/jdbi表示。
请看一看整个考试课。
然后,请注意以下与异常相关的测试方法:
testExceptionAbortsTransaction()。testExceptionAbortsUseTransaction()。我们可以从的实现中检查这些测试方法
java.io.IOException异常类型。https://stackoverflow.com/questions/69913445
复制相似问题