如何處理 h2 數據庫無法處理中斷,我偶爾會看到我的嵌入式 h2 數據庫似乎已損壞,特別是我修改了一個 ExecutorService,這樣如果任務花費的時間太長,它就會取消任務。該任務可以取消,但是隨后的數據庫訪問失敗,出現異常我后來發現了這個問題基本上,如果在嵌入式模式下使用 H2,并且它接收到中斷,那么所有后續訪問都會失敗,直到線程池關閉并重新打開。在我給出的例子中,一個進程必須被取消,因為它似乎被卡住了,除了中斷之外沒有其他解決方案我還有另一種情況,通常控制器線程本身不直接執行數據庫工作,所以我一直在努力了解為什么發生中斷時為什么會導致數據庫錯誤,因為這是由控制器線程處理的。我現在已經解決了這個問題,我使用的是具有固定大小 BlockingQueue 的 ExecutorService(這樣我們就不會在內存中建立大隊列),但是如果隊列已滿,那么新任務實際上由控制器線程執行(因為 CallerRunsPolicy),所以控制器線程畢竟可以調用數據庫。我將 H2 與休眠一起使用,并且在這兩種情況下,在中斷后立即調用以下命令 HibernateUtil.closeFactory();似乎解決了這個問題,但是我想這意味著任何其他具有休眠會話的線程都將被破壞,但至少新打開的會話是可以的。所以我對這個解決方法不是特別滿意,還有其他想法嗎?使用 H2 作為服務器不是解決方案,因為 H2 的全部要點是應用程序中自包含的嵌入式數據庫。
添加回答
舉報
0/150
提交
取消