核心模块

Vert.x 应用程序启动器

预览

本质上,启动 Vert.x 应用程序并不是一项复杂的任务:编写一个带有 main 方法的类,创建一个 Vert.x 实例并部署主 Verticle。

但是,通常需要解决相同的问题,例如:

  • 配置 Verticle 实例的数量

  • 使用特定的 线程模型 部署主 Verticle

  • 创建集群 Vert.x 实例

  • 当 JVM 被信号要求停止时,正确关闭 Vert.x

Vert.x 应用程序启动器是一个解决此类问题的工具,无需在每个项目中重复相同的代码。

此模块在 Vert.x 5 中引入,取代了 Vert.x 4 的 io.vertx.core.Launcher
此模块具有技术预览状态,这意味着 API 可能会在版本之间发生变化。

依赖设置

要使用 Vert.x 应用程序启动器,请将以下依赖项添加到您的构建描述符的依赖项部分

  • Maven(在您的 pom.xml 中)

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-launcher-application</artifactId>
  <version>5.0.1</version>
</dependency>
  • Gradle(在您的 build.gradle 文件中)

dependencies {
  compile 'io.vertx:vertx-launcher-application:5.0.1'
}

快速入门

要启动您的 Vert.x 应用程序,请使用 VertxApplication 作为主类。

# Assuming the command is executed on a Unix-like system which has the classpath configured in the CLASSPATH environment variable.
java -cp $CLASSPATH io.vertx.launcher.application.VertxApplication my.app.MainVerticle

如果您的应用程序打包为可执行 JAR,并且 META-INF/MANIFEST.MF 文件中的 Main-Class 属性设置为 io.vertx.launcher.application.VertxApplication,则命令可以简化。

java -jar myapp.jar my.app.MainVerticle

主 Verticle 参数

VertxApplication 主类接受一个参数,即要部署的主 Verticle 的名称。

如果您的应用程序打包为可执行 JAR,并在 META-INF/MANIFEST.MF 文件中具有以下属性,则此参数是可选的:

  • Main-Class 属性设置为 io.vertx.launcher.application.VertxApplication(或其子类,如下文所述),并且

  • Main-Verticle 属性设置为主 Verticle 的名称。

META-INF/MANIFEST.MF 文件
Main-Class: io.vertx.launcher.application.VertxApplication
Main-Verticle: my.app.MainVerticle

选项

除了主 Verticle 参数之外,VertxApplication 主类还接受多个选项。

-options, --options, -vertx-options, --vertx-options=<vertxOptionsStr>

指定 Vert.x 选项。

它应该引用一个表示选项的 JSON 文件,或者是一个 JSON 字符串。

-c, -cluster, --cluster

如果指定,则 Vert.x 实例将与网络上的任何其他 Vert.x 实例形成集群。

-cluster-port, --cluster-port=<clusterPort>

用于集群通信的端口。

默认情况下,会选择一个空闲的随机端口。

-cluster-host, --cluster-host=<clusterHost>

用于集群通信绑定的主机。

如果未指定,Vert.x 将尝试从可用接口中选择一个。

-cluster-public-port, --cluster-public-port=<clusterPublicPort>

用于集群通信的公共端口。

默认情况下,Vert.x 使用与集群端口相同的端口。

-cluster-public-host, --cluster-public-host=<clusterPublicHost>

用于集群通信绑定的公共主机。

默认情况下,Vert.x 使用与集群主机相同的主机。

-deployment-options, --deployment-options=<deploymentOptionsStr>

指定主 Verticle 部署选项。

-w, -worker, --worker

如果指定,则主 Verticle 以工作线程模型部署。

优先级高于部署选项中定义的值。

-vt, -virtual-thread, --virtual-thread

如果指定,则主 Verticle 以虚拟线程模型部署。

优先级高于部署选项中定义的值。

-instances, --instances=<instances>

指定将部署多少个 Verticle 实例。

优先级高于部署选项中定义的值。

-conf, --conf=<configStr>

指定应提供给 Verticle 的配置。

它应该引用一个表示选项的 JSON 文件,或者是一个 JSON 字符串。

-h, -help, --help

显示帮助信息。

可扩展性

钩子

有时,根据环境或配置更改默认行为会很有用。或者,您可能希望在 Vert.x 启动后执行一些操作。

对于这种情况,您可以创建一个主类和 VertxApplication 的实例,使用钩子。

main 方法实现
VertxApplicationHooks hooks = new VertxApplicationHooks() {
  @Override
  public void beforeStartingVertx(HookContext context) {
    VertxOptions vertxOptions = context.vertxOptions();
    // You could customize the metrics/tracer options here
  }

  @Override
  public void afterVerticleDeployed(HookContext context) {
    System.out.println("Hooray!");
  }
};
VertxApplication app = new VertxApplication(args, hooks);
app.launch();

有关钩子的更多详细信息,请参阅 VertxApplicationHooksHookContext 文档。

子类化

如果您需要对 Vert.x 应用程序启动器行为进行进一步控制,请考虑对其进行子类化。在这种情况下,您将能够调用一个特殊构造函数,让您决定在失败时是否:

  • 应用程序应将用法(帮助信息)打印到 stdout,并且

  • 应用程序应以特定代码退出 JVM。