簡體   English   中英

防止來自Spring Boot的數據庫關閉命令

[英]Prevent database shutdown command from Spring Boot

當我運行我的Spring Boot應用程序(從Intellij IDEA中)並觸發該應用程序的停止,重新啟動或自動重新部署時; 正在向HSQLDB發出關閉命令。

我從外部終端窗口在服務器模式下運行HSQLDB(v.2.3.4)。

重新啟動或停止Spring Boot應用程序時的HSQLDB Server日志:

[Server@4f023edb]: Initiating shutdown sequence...
[Server@4f023edb]: Shutdown sequence completed in 101 ms.
[Server@4f023edb]: 2017-05-05 21:47:01.878 SHUTDOWN : System.exit() is called next 

這當然很煩人,因為每次重新部署應用程序時,我都要經歷手動啟動HSQLDB的麻煩。 我如何防止這種情況的發生或對實際情況的解釋。

從Intellij IDEA中運行Spring Boot應用程序時,似乎只會發生這種情況,如果我從終端窗口啟動Spring Boot application-jar並發出shutdown Ctrl + C ,則HSQLDB不會受到影響。

原來之所以只能在Intellij IDEA中運行時遇到此問題,是因為spring-boot-devtools (項目中包含的maven依賴項)沒有打包在我從終端窗口運行的application-jar中。

運行完全打包的應用程序時,將自動禁用開發人員工具。 如果您的應用程序是使用java -jar啟動的,或者是使用特殊的類加載器啟動的,則將其視為“生產應用程序”。 將依賴項標記為可選是一種最佳做法,可防止使用您的項目將devtools過渡應用到其他模塊。 Gradle不支持現成的可選依賴項,因此您可能希望同時查看propdeps-plugin。

從Intellij IDEA內部運行應用程序時,spring-boot-devtools處於活動狀態,並且提供了一個關閉鈎子,該鈎子將嘗試正常關閉數據庫資源(除其他外)。

可以通過以下方式禁用關閉掛鈎:

SpringApplication app = new SpringApplication(MyApplication.class);
app.setRegisterShutdownHook(false);  //This disables the shutdown hook
app.run(args);

此解決方案解決了我遇到的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM