在使用 Vert.x
时,一般先从生命周期下手。而 vertx-core
提供了默认的 io.vertx.core.Launcher
实现。
vertx-core
包中存在一个 interface
,名为 VertxLifecycleHooks
,可让启动器的子类在发生不同事件时得到通知。
这是 Vert.x
启动前的钩子,在这个阶段, Vert.x
的 Options
还可以被更新。入参 config
是通过命令行中的 -conf
传递进来的参数。
void afterConfigParsed(JsonObject config);
复制代码
与 afterConfigParsed
基本相同,参数也可以改变。入参为 VertxOptions
。
void beforeStartingVertx(VertxOptions options);
复制代码
此时 Vert.x
的实例已经被创建。
void afterStartingVertx(Vertx vertx);
复制代码
Verticle
被部署之前。
void beforeDeployingVerticle(DeploymentOptions deploymentOptions);
复制代码
Vert.x
实例被终止之前。
void beforeStoppingVertx(Vertx vertx);
复制代码
Vert.x
实例被终止之后。
void afterStoppingVertx();
复制代码
部署失败时。
void handleDeployFailed(Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions,
Throwable cause);
复制代码
Launcher
是 Vert.x 的启动器,实现了 VertxLifecycleHooks
,但是相关方法的实现大多是空的,我们可以自定义自己的 Laucher
针对每个事件阶段进行处理。
/**
* 部署失败时,此方法会被调用。您可以重写此方法来自定义行为。
* 默认情况下,它关闭`vertx`实例。
*
* @param vertx vert.x 实例
* @param mainVerticle verticle
* @param deploymentOptions verticle 部署参数
* @param cause 部署失败的原因
*/
public void handleDeployFailed(Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions, Throwable cause) {
// 如果部署失败,默认行为是关闭Vert.x
vertx.close();
}
复制代码
/**
* Description: 启动 Launcher .<br>
*
* @author m-xy
* Created By 2020/4/2 12:14
*/
public class MainLauncher extends Launcher {
private final static Logger logger = LoggerFactory.getLogger(MainLauncher.class);
public static void main(String[] args) {
System.setProperty(LOGGER_DELEGATE_FACTORY_CLASS_NAME, SLF4JLogDelegateFactory.class.getName());
new MainLauncher().dispatch(args);
}
/**
* 启动前准备阶段.
*
* @param options 参数
*/
@Override
public void beforeStartingVertx(VertxOptions options) {
logger.info("[Vert.x] Vert.x Options Ready");
options.setPreferNativeTransport(true);
super.beforeStartingVertx(options);
}
/**
* Vert.x启动完成阶段.
*
* @param vertx
*/
@Override
public void afterStartingVertx(Vertx vertx) {
logger.info("[Vert.x] Starting Vert.x (JVM running for you)");
super.afterStartingVertx(vertx);
}
/**
* Vert.x停止阶段.
*/
@Override
public void afterStoppingVertx() {
logger.info("[Vert.x] Stopping Vert.x (JVM running for you)");
super.afterStoppingVertx();
}
/**
* 部署失败时,此方法会被调用。您可以重写此方法来自定义行为。
* 默认情况下,它关闭`vertx`实例。
*
* @param vertx vert.x 实例
* @param mainVerticle verticle
* @param deploymentOptions verticle 部署参数
* @param cause 部署失败的原因
*/
@Override
public void handleDeployFailed(
Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions, Throwable cause) {
logger.error("[Vert.x] Start Vert.x Failed", cause);
super.handleDeployFailed(vertx, mainVerticle, deploymentOptions, cause);
}
}
复制代码