为了账号安全,请及时绑定邮箱和手机立即绑定

h2数据库无法处理中断怎么办

h2数据库无法处理中断怎么办

皈依舞 2023-04-13 16:40:55
如何处理 h2 数据库无法处理中断,我偶尔会看到我的嵌入式 h2 数据库似乎已损坏,特别是我修改了一个 ExecutorService,这样如果任务花费的时间太长,它就会取消任务。该任务可以取消,但是随后的数据库访问失败,出现异常我后来发现了这个问题基本上,如果在嵌入式模式下使用 H2,并且它接收到中断,那么所有后续访问都会失败,直到线程池关闭并重新打开。在我给出的例子中,一个进程必须被取消,因为它似乎被卡住了,除了中断之外没有其他解决方案我还有另一种情况,通常控制器线程本身不直接执行数据库工作,所以我一直在努力了解为什么发生中断时为什么会导致数据库错误,因为这是由控制器线程处理的。我现在已经解决了这个问题,我使用的是具有固定大小 BlockingQueue 的 ExecutorService(这样我们就不会在内存中建立大队列),但是如果队列已满,那么新任务实际上由控制器线程执行(因为 CallerRunsPolicy),所以控制器线程毕竟可以调用数据库。我将 H2 与休眠一起使用,并且在这两种情况下,在中断后立即调用以下命令   HibernateUtil.closeFactory();似乎解决了这个问题,但是我想这意味着任何其他具有休眠会话的线程都将被破坏,但至少新打开的会话是可以的。所以我对这个解决方法不是特别满意,还有其他想法吗?使用 H2 作为服务器不是解决方案,因为 H2 的全部要点是应用程序中自包含的嵌入式数据库。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

尽管没有正确记录使用异步协议允许在不中断所有其他连接的情况下中断连接。



查看完整回答
反对 回复 2023-04-13
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信