我用这种方式使用vertx和guice:
public static void main(String[] args) throws InterruptedException {
final Logger logger = Logger.getLogger(StarterVerticle.class);
ClusterManager mgr = new HazelcastClusterManager();
VertxOptions options = new VertxOptions().setClusterManager(mgr);
Vertx.clusteredVertx(options, res -> {
DeploymentOptions deploymentOptions = new DeploymentOptions().setConfig(config);
if (res.succeeded()) {
Vertx vertx = res.result();
// Injector injector = Guice.createInjector(new AppInjector(vertx));
Injector injector = Guice.createInjector(new AppInjector(vertx,deploymentOptions));
vertx.deployVerticle(injector.getInstance(VertxHttpServerVerticle.class), deploymentOptions);
vertx.deployVerticle(injector.getInstance(Verticle1.class), deploymentOptions);
vertx.deployVerticle(injector.getInstance(Verticle2.class), deploymentOptions);
logger.info("World Map Service module deployed on vertx!");
} else {
logger.error("Error initiating Vertx cluster");
}
});
}
我将my-app.json
放到我的主要项目目录my-app-conf.json
{
"http.port" : 8082
}
VertxHttpServerVerticle:
public class VertxHttpServerVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> fut) {
....
.createHttpServer()
.requestHandler(router::accept)
.listen(
// Retrieve the port from the configuration,
// default to 8090.
config().getString("http.port", "8090"),
不会收集http.port。 我用这种方式执行了jar:
java -jar web/build/libs/com.my-app-all.jar -conf wm-conf.json
我仍然可以获得config().getString("http.port")
null
知道我错过了什么吗?
答案 0 :(得分:3)
如果你想通过-conf参数进行传递配置,你的初始类应该扩展AbstractVerticle
。
如果您通过vertx.deployVerticle()
部署Verticle,则应将http.port
手动传递到config
,然后将此类对象传递给DeploymentOptions
实例。
您可以在vert.x documenation中了解有关Verticle部署的更多信息。
答案 1 :(得分:0)
您的jar尝试从web / build / libs目录加载配置,而文件实际上位于项目根目录中。尝试使用相对路径&#34; ../../../ wm-conf.json&#34;或者只是移动conf文件来协助jar。