13

SpringBoot探索04 – Java Headless Mode

 4 years ago
source link: https://www.zhyea.com/2020/02/29/springboot-explore-04-java-headless-mode.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

引入

在springboot的启动代码中看到了下面这一句:

 private void configureHeadlessProperty() {
 System.setProperty(SYSTEM_PROPERTY_JAVA_AWT_HEADLESS,
 System.getProperty(SYSTEM_PROPERTY_JAVA_AWT_HEADLESS, Boolean.toString(this.headless)));
 }

先不谈这段代码的作用,只说这里的写法就有很多可以借鉴的地方:

  1. 定义了有意义的常量
  2. 在set之前先get以避免覆盖用户自定义配置
  3. 允许用户在程序中配置headless项,所以有了 this . headless 变量
  4. Boolean . toString 这样的写法也是极好的,起到了规范统一的作用

从spring的代码中就可以看到设计者对我们这些普通Developer的友好。

忽略掉这些有价值(但有可能显得啰嗦)的内容,可以提炼出这行代码:

System.setProperty("java.awt.headless", "true");

这行代码的作用是:声明当前应用使用 headless 模式。

说明

Headless模式是应用的一种配置模式。在服务器可能缺少显示设备、键盘、鼠标等外设的情况下可以使用这种模式。

java.awt.toolkitjava.awt.graphicsenvironment 类中的很多方法,除了对字体、图形和打印的操作外还需要调用显示器、键盘和鼠标等设备。但是有一些类,比如 Canvas Panel ,是可以在headless模式下执行的。

在headless模式下,(awt)应用程序可以执行如下操作:

  1. 创建轻量级组件
  2. 收集关于可用的字体、字体指标和字体设置的信息
  3. 设置颜色来渲染准备图片
  4. 创造和获取图像,为渲染准备图片
  5. 使用java.awt.PrintJob,java.awt.print.*,和javax.print.*类里的打印操作

简单来说,headless模式是一种声明:现在不要指望硬件的支持了,只能使用系统的运算能力来做些非可视化的处理工作。

除此之外,应该是没有其他作用了。

重点

关于这个配置在性能上的影响:

  1. 如果应用不需要任何 head ,那么有无这个配置没有任何影响;
  2. 如果应用有弹出窗口之类的操作,那么在 headless 模式下这种操作会被阻止。

总之,这是一项提示类的配置。

参考

End!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK