在使用
Vert.x
時,一般先從生命週期下手。而vertx-core
提供了預設的io.vertx.core.Launcher
實現。
Vert.x 生命週期中的事件
vertx-core
包中存在一個interface
,名為VertxLifecycleHooks
,可讓啟動器的子類在發生不同事件時得到通知。
afterConfigParsed
這是
Vert.x
啟動前的鉤子,在這個階段,Vert.x
的Options
還可以被更新。入參config
是通過命令列中的-conf
傳遞進來的引數。
void afterConfigParsed(JsonObject config);
複製程式碼
beforeStartingVertx
與
afterConfigParsed
基本相同,引數也可以改變。入參為VertxOptions
。
void beforeStartingVertx(VertxOptions options);
複製程式碼
afterStartingVertx
此時
Vert.x
的例項已經被建立。
void afterStartingVertx(Vertx vertx);
複製程式碼
beforeDeployingVerticle
Verticle
被部署之前。
void beforeDeployingVerticle(DeploymentOptions deploymentOptions);
複製程式碼
beforeStoppingVertx
Vert.x
例項被終止之前。
void beforeStoppingVertx(Vertx vertx);
複製程式碼
afterStoppingVertx
Vert.x
例項被終止之後。
void afterStoppingVertx();
複製程式碼
handleDeployFailed
部署失敗時。
void handleDeployFailed(Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions,
Throwable cause);
複製程式碼
Vert.x 中的 Launcher
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();
}
複製程式碼
自定義 Launcher 舉例
/**
* 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);
}
}
複製程式碼