2017-05-05 74 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); 

该解决方案解决了我所遇到的问题。