<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-launcher-application</artifactId>
<version>5.0.1</version>
</dependency>
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
中)
-
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();
有关钩子的更多详细信息,请参阅 VertxApplicationHooks
和 HookContext
文档。
子类化
如果您需要对 Vert.x 应用程序启动器行为进行进一步控制,请考虑对其进行子类化。在这种情况下,您将能够调用一个特殊构造函数,让您决定在失败时是否:
-
应用程序应将用法(帮助信息)打印到
stdout
,并且 -
应用程序应以特定代码退出 JVM。