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