如果我使用 Spring Tool Suite 或 Eclipse 的 Spring IDE 插件,我可以通过 2 种方式运行 Spring Boot 应用程序:
Run As:
Spring Boot App
Java Application
这两个命令都可以正常工作,并且可以毫无问题地启动我的 Spring Boot 应用程序。但是,我想了解这两个不同过程之间的区别。它们之间实际上有区别还是它们的工作方式相同?
如果我使用 Spring Tool Suite 或 Eclipse 的 Spring IDE 插件,我可以通过 2 种方式运行 Spring Boot 应用程序:
Run As:
Spring Boot App
Java Application
这两个命令都可以正常工作,并且可以毫无问题地启动我的 Spring Boot 应用程序。但是,我想了解这两个不同过程之间的区别。它们之间实际上有区别还是它们的工作方式相同?
正如有人已经在评论中暗示的那样,存在一些差异。本文解释了您在启动配置编辑器中获得了一些额外的“花里胡哨”。
第二个也许更重要的区别是,从 Boot 1.3 开始,Spring Boot App 提供了一个 JMX bean,它允许 STS 很好地要求应用程序关闭。当您从 IDE 终止应用程序时,例如通过单击停止/重新启动按钮,STS 使用此 JMX bean 要求启动应用程序关闭。这是在“Run As Boot App”启动器中实现的功能,因此如果您使用“Run As Java App”,它不会生效。
Java 启动器使用 Java 的Process.destroy()方法简单地终止与启动相关的进程。这是杀死相关进程的一种更“激进”的方式,并且可能不允许应用程序正确清理内容,例如干净地关闭数据库连接。
所以......总之你得到两件事: