运行 As: Spring Boot App 和 运行 As: Java Application 之间有区别吗?

Is there a difference between Run As: Spring Boot App and Run As: Java Application?

如果我使用 Spring Tool Suite 或 Spring IDE eclipse 插件,我可以 运行 spring 启动应用程序 2 种方式:

Run As:
    Spring Boot App
    Java Application

这两个命令都有效,可以毫无问题地启动我的 spring 启动应用程序。但是,我想了解这两个不同过程之间的区别。它们之间真的有区别还是它们的工作方式相同?

正如有人已经在评论中暗示的那样,存在一些差异。 This article 说明您在启动配置编辑器中得到一些额外的 'Bells and Whistles'。

第二个也许更重要的区别是,自 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() 方法简单地终止与启动相关的进程。这是一种更 'aggressive' 的方式来终止相关进程,并且可能不允许应用程序正确清理内容,例如干净地关闭数据库连接。

所以...总而言之,您得到两件事:

  1. 启动 conf 编辑器中的一些额外的启动特定 UI
  2. Boot 1.3 及更高版本的进程正常终止。