我应该在基于 Spring-boot 的后端使用无头模式吗?

Should I use headless mode in Spring-boot based backend?

我正在开发一个基于简单整体架构的应用程序:rest API 后端与 spring-boot + 前端与 Js 框架。

我一直在阅读 运行 java 应用程序时的无头模式,我想知道 运行 嵌入式 tomcat 是否与我的 spring-以无头模式启动应用程序是个好主意。

一般来说,运行在控制台中运行应用程序需要某种终端来写入。

在基于 Unix 的系统中,这些终端被称为 tty

这意味着以下内容:

只要您通过 SSH 打开与服务器的连接,就会得到一个 tty。您的非无头应用程序将 运行 在该 tty 中,直到该 tty 关闭。为避免这种情况,您需要 screen.

之类的东西

对于Windows系统:如果关闭console/sign用户的cmd window,应用服务器也会停止运行ning。

这就是为什么生产安装通常是无头的和基于服务的。

背景就这么多了,official docs其实是这样说的:

In addition to running Spring Boot applications by using java -jar, it is also possible to make fully executable applications for Unix systems. A fully executable jar can be executed like any other executable binary or it can be registered with init.d or systemd. This helps when installing and managing Spring Boot applications in common production environments.

这是描述here

通常不需要指定 -Djava.awt.headless=true,因为从 Java 1.8 开始,JRE 会自行确定图形环境是否可用,如果没有图形环境可用,则切换到无头模式.

Java11 中的相关来源:https://github.com/openjdk/jdk11/blob/master/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java#L166

  • 如果您是 运行 类 Unix 操作系统并且未设置 DISPLAY 环境变量,则 headless 为真
  • 在 Windows 上假定图形设备始终存在,因此 headless 为 false