这里主要讲解Vert.x配置文件的读取和使用,引用之前的项目《Vert.x 4 Web应用初识》
maven pom.xml
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-config</artifactId>
<version>4.5.9</version>
</dependency>
主要是config包
根据vert.x官方文档,配置有很多种加载方法,这里以文件加载方法作为讲解,更多请参考Config | Eclipse Vert.x (vertx.io)
在resources/conf
目录下创建config.json
配置文件,内容如下参考:
{
"vertx": {
"eventLoopPoolSize": 2,
"workerPoolSize": 20,
"blockedThreadCheckInterval": 999999999,
"maxEventLoopExecuteTime": 999999999,
"maxWorkerExecuteTime": 999999999,
"eventBusOptions": {
"connectTimeout": 1800000
}
},
"server": {
"port": 8088,
"contextPath": "/"
}
}
创建一个App类用作启动类(注意打包要用这个类不用默认的MainVerticle了)
代码
@Slf4j
public class App {
public static void main(String[] args) {
Vertx tempVertx = Vertx.vertx();
// ConfigStoreOptions file = new ConfigStoreOptions()
// .setType("file")
// .setFormat("properties")
// .setConfig(new JsonObject().put("path", "vertx.properties"));
// ConfigRetrieverOptions options = new ConfigRetrieverOptions()
// .addStore(file);
// ConfigRetriever retriever = ConfigRetriever.create(tempVertx , options);
ConfigRetriever retriever = ConfigRetriever.create(tempVertx);
retriever.getConfig().onComplete(json -> {
tempVertx .close().onComplete(asyncResult -> {
log.info("tempVertx vertx closed");
});
JsonObject result = json.result();
log.info("config info :{}",result.encode());
JsonObject vertxConfig = result.getJsonObject("vertx");
JsonObject serverConfig = result.getJsonObject("server");
Vertx vertx = Vertx.vertx(new VertxOptions(vertxConfig));
vertx.deployVerticle(MainVerticle.class.getName(),
new DeploymentOptions().setConfig(serverConfig));
});
}
// ConfigStoreOptions file = new ConfigStoreOptions()
// .setType("file")
// .setFormat("properties")
// .setConfig(new JsonObject().put("path", "vertx.properties"));
// ConfigRetrieverOptions options = new ConfigRetrieverOptions()
// .addStore(file);
// ConfigRetriever retriever = ConfigRetriever.create(tempVertx , options);
以上注释掉的代码可以自定义设置配置文件路径,默认读取的是resources/conf/config.json
配置文件
MainVerticle 代码
@Slf4j
public class MainVerticle extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
Router router = Router.router(vertx);
Integer httpPort = config().getInteger("port", 8080);
log.info("HTTP port: {}", httpPort);
vertx.createHttpServer()
.requestHandler(router)
.listen(httpPort, result -> {
if (result.succeeded()) {
startPromise.complete();
}else {
startPromise.fail(result.cause());
}
});
}
}
启动项目,观察日志输出的端口
需要注意,此处我们是以App类启动的,非io.vertx.core.Launcher
从上图可以看到端口为配置文件端口非默认端口,与预期结果一致。
注意,为了打包后能一致还需要修改pom.xml配置
修改pom的launcher.class,从MainVerticle 修改为App
对比修改前后打包运行的情况可以看到,如果不修改pom.xml则配置无法生效。
http://blog.xqlee.com/article/2408132016052954.html