我需要java lucene啓動代碼來檢查在JVM崩潰後是否存在被鎖定的write.lock
文件,如果需要解鎖它,如何在jvm崩潰後清除lucene write.lock文件的鎖定?
發生JVM崩潰後,lucene沒有機會正確釋放write.lock文件。我需要的是在啓動時檢查這個案例的java lucene代碼,並且在不投擲大油脂LockObtainFailedException
的情況下順利處理它。
正在使用Lucene版本5。
我需要java lucene啓動代碼來檢查在JVM崩潰後是否存在被鎖定的write.lock
文件,如果需要解鎖它,如何在jvm崩潰後清除lucene write.lock文件的鎖定?
發生JVM崩潰後,lucene沒有機會正確釋放write.lock文件。我需要的是在啓動時檢查這個案例的java lucene代碼,並且在不投擲大油脂LockObtainFailedException
的情況下順利處理它。
正在使用Lucene版本5。
這應該通過刪除鎖定文件來解決Lucene之外的問題。
問題是,新的Lucene實例無法安全地刪除鎖定文件,因爲它不能確定鎖定文件是否存在,因爲現有實例仍在運行。它不能。
您需要的是一個外部應用程序,可以通過測試來查看實例是否仍然存在。您可以使用一些簡單的腳本來構建它:
kill -0 <pid>
ps ... <pid>
的輸出上進行模式匹配。如果您的應用程序註冊爲服務(在Linux上),各種「init」和服務管理服務(System V init,upstart,systemd)允許您以受控方式停止和啓動服務。您甚至可以配置服務以在服務崩潰時重新啓動。
第三種方法是使用現有的HA(或類似的)框架在崩潰時自動重新啓動Lucene。現有的框架可能會爲您自己從頭開始開發一些功能。
只是刪除文件? – freedev
它比這更復雜,正在向客戶端發送軟件升級,關閉舊應用程序並啓動新的二進制文件。舊應用程序無法釋放鎖定文件,因此新升級會引發LockObtainFailed異常。指導每個客戶手動刪除文件非常繁瑣。 –