2017-05-05 32 views
1

當我運行我的Spring Boot應用程序(從Intellij IDEA中)並觸發停止,重新啓動或自動重新部署應用程序;有些事情正在向我的HSQLDB發出關閉命令。防止Spring Boot的數據庫關閉命令

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

在我重新啓動或停止我的春節,啓動應用程序的那一刻

HSQLDB服務器日誌:

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

當然,這是很煩人的,因爲我必須要經過的每一次重新部署時手動造就了我的HSQLDB的麻煩應用程序。我如何防止這種情況發生,或者解釋實際發生的事情。

這似乎只來自的IntelliJ IDEA內運行的春天啓動應用程序時發生,如果我開始從一個終端窗口併發出關機按Ctrl + ç春季啓動應用程序,罐子,然後HSQLDB不受影響。

回答

2

原來我只在Intellij IDEA內運行時遇到這個問題的原因是因爲spring-boot-devtools(包含在我的項目中的maven依賴項)沒有打包在從終端窗口運行的應用程序jar中。

運行完整打包的應用程序時,會自動禁用開發人員工具。如果您的應用程序是使用java -jar啓動的,或者如果它是使用特殊的類加載器啓動的,那麼它就被認爲是「生產應用程序」。將依賴標記爲可選項是一種最佳實踐,它可以防止devtools通過項目傳遞到其他模塊。 Gradle不支持可選的依賴關係,因此您可能希望在此期間查看propdeps插件。

彈簧引導devtools從IntelliJ IDEA的內部運行應用程序時是活動的,並提供一個關閉掛鉤,將嘗試正常關閉數據庫資源(除其他事項外)。

關閉掛鉤可以通過以下方式禁用;

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

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