HSQLDB 死鎖問題處理

今天第二次遇到 HSQLDB 死鎖的問題,又搜索了一遍解決方案,雖然解決方法很簡單,但是非常有必要記錄下來。本篇不深究原因,只給出解決方案。

問題描述

在測試代碼中使用 HSQLDB 內存數據庫時,數據庫執行某 SQL 時卡住不動(或者你看不出來和執行 SQL 有關)。

此時導出線程堆棧可以看到類似下面的堆棧信息:在這裏插入圖片描述

解決辦法

HSQLDB 支持三種鎖設置:SET DATABASE TRANSACTION CONTROL { LOCKS | MVLOCKS | MVCC },分別爲 LOCKS | MVLOCKS | MVCC,默認值爲 LOCKS

關於鎖的詳細介紹看這裏:http://hsqldb.org/doc/2.0/guide/sessions-chapt.html

解決方法 1

在內存數據庫執行 SQL,先執行 SET DATABASE TRANSACTION CONTROL MVCC,設置爲 MVCC 模式即可。

解決辦法 2

DriverManager.getConnection(String url,Properties info);Properties 中設置如下屬性和值:

info.setProperty("hsqldb.tx", "mvcc");

解決辦法 3

JDBC URL 參數方式: jdbc:hsqldb:mem:test;hsqldb.tx=mvcc

解決辦法 4

使用 server.properties 配置的情況下:

hsqldb.tx=mvcc

有關 hsqldb.tx 屬性的詳細信息可以參考這裏:http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章