Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Transactions Jooq事务:若事务中抛出异常,则不会释放到池的连接_Transactions_Kotlin_Jooq - Fatal编程技术网

Transactions Jooq事务:若事务中抛出异常,则不会释放到池的连接

Transactions Jooq事务:若事务中抛出异常,则不会释放到池的连接,transactions,kotlin,jooq,Transactions,Kotlin,Jooq,我在用HikariCP和Jooq。 守则: *在科特林: //dataSource is from Hikari DSL.using(dataSource, sqlDialect).transaction { config -> //in create it simply calls dsl.insertInto .... UserRepo.create(User(name="joe"), DSL.using(config)) UserRepo.c

我在用HikariCP和Jooq。 守则: *在科特林:

//dataSource is from Hikari
DSL.using(dataSource, sqlDialect).transaction {
     config ->
     //in create it simply calls dsl.insertInto .... 
     UserRepo.create(User(name="joe"), DSL.using(config))
     UserRepo.create(User(name="foo"), DSL.using(config))

}
一切正常

但如果我抛出block,连接不会关闭(释放)(尽管事务被回滚)

更新:

我是Java新手,所以这是我的错。在测试中,我曾经抛出Kotlin的
Throwable
(不是
异常
),代码的Java部分没有正确处理它


每件事都按预期进行,但有常规的异常。

正如您所注意到的,对于您的问题编辑,jOOQ内部只捕获
异常
子类型,而不是
可丢弃的
子类型,以便影响事务管理。在中,您可以看到以下代码(采用版本3.9.6,此问题简称):

试试看{
提供者。开始(ctx);
结果=transactional.run(ctx.configuration());
提交(ctx);
}
捕获(异常原因){//
try {
    provider.begin(ctx);
    result = transactional.run(ctx.configuration());
    provider.commit(ctx);
}
catch (Exception cause) { // <-- This is the problem
    ctx.cause(cause);
    provider.rollback(ctx);

    if (cause instanceof RuntimeException) {
        throw (RuntimeException) cause;
    }
    else {
        throw new DataAccessException("Rollback caused", cause);
    }
}