【问题标题】:JOOQ execution listener does not catch exceptionJOOQ 执行侦听器未捕获异常
【发布时间】:2021-06-07 07:26:53
【问题描述】:

我正在尝试为优化锁定实施通用解决方案。我想要实现的是在记录的版本更改时运行一段特定的代码。我将它实现为一个寻找DataChangedExceptionExecuteListener 实例。它已注册为 Spring bean。

class LockingListener : DefaultExecuteListener() {

    override fun exception(ctx: ExecuteContext) {
        val exception = ctx.exception()

        if (exception is DataChangedException) {
            ctx.exception(IllegalStateException("Accessed data has been altered mid-operation."))
        }
    }
}
@Configuration
class JooqConfig {

    @Bean
    fun lockingListenerProvider() = DefaultExecuteListenerProvider(LockingListener())
}

我在org.jooq.impl.ExecuteListeners#get 中设置了一个断点,它看起来确实与LoggerListenerJooqExceptionTranslator 一起被拾取。

但是,当我尝试运行测试用例时,DataChangedException 不会在 UpdateableRecord#update 上被选中,而是得到以下堆栈跟踪,看不到 IllegalStateException

org.jooq.exception.DataChangedException: Database record has been changed or doesn't exist any longer
    at org.jooq.impl.UpdatableRecordImpl.checkIfChanged(UpdatableRecordImpl.java:540)
    at org.jooq.impl.UpdatableRecordImpl.storeMergeOrUpdate0(UpdatableRecordImpl.java:349)
    at org.jooq.impl.UpdatableRecordImpl.storeUpdate0(UpdatableRecordImpl.java:241)
    at org.jooq.impl.UpdatableRecordImpl.access$100(UpdatableRecordImpl.java:89)
    at org.jooq.impl.UpdatableRecordImpl$2.operate(UpdatableRecordImpl.java:232)
    at org.jooq.impl.RecordDelegate.operate(RecordDelegate.java:149)
    at org.jooq.impl.UpdatableRecordImpl.storeUpdate(UpdatableRecordImpl.java:228)
    at org.jooq.impl.UpdatableRecordImpl.update(UpdatableRecordImpl.java:165)

调试显示LockingListener#exception甚至没有进入。

【问题讨论】:

    标签: spring jooq


    【解决方案1】:

    该异常不是 ExecuteListener 生命周期的一部分,即处理与 JDBC API 交互的生命周期。换句话说,它不是SQLException,它发生在堆栈的更高位置。请改用RecordListener.exception() 回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多