如何编写json配置文件以动态地在vertx中部署Verticle?
答案 0 :(得分:2)
无耻的插件,我为此写了一个库:https://github.com/jponge/vertx-boot
它适用于HOCON,它是JSON的超集。 您可以在HOCON中编写配置文件,其中可以使用Java属性,环境变量,备用配置文件等覆盖值,并且库提供了一个主Verticle ,它可以旋转所有声明的Verticle。
是否符合您的要求?
答案 1 :(得分:0)
我将如何处理此案例将利用Vertx Config。我会有一个初始Verticle来检索配置,然后我会从配置中提取你想要部署的类名。
Kotlin示例
package com.example
import io.vertx.config.ConfigRetriever
import io.vertx.config.ConfigRetriever.create
import io.vertx.config.ConfigStoreOptions
import io.vertx.core.*
import io.vertx.core.json.JsonArray
import io.vertx.core.json.JsonObject
import io.vertx.core.logging.Logger
import io.vertx.core.logging.LoggerFactory
import io.vertx.kotlin.config.ConfigRetrieverOptions
class EntryVerticle : AbstractVerticle()
{
val log: Logger = LoggerFactory.getLogger(EntryVerticle::class.simpleName)
override fun start(startFuture: Future<Void>?) {
log.info("Started!!")
val retrieverOptions = ConfigRetrieverOptions()
//FYI you need to verify that the file is there otherwise this app won't launch.
//Too much for this example
val fileConfig = ConfigStoreOptions()
fileConfig.setType("file").setFormat("json").config = JsonObject().put("path", "/app.json")
retrieverOptions.addStore(fileConfig)
val retriever = create(vertx, retrieverOptions)
retriever.getConfig { config ->
if(config.succeeded()) {
val verticles = if (config.result().containsKey("verticles"))
{
config.result().getJsonArray("verticles")
}
else JsonArray()
//you would also need to verify this is a string.
verticles.forEach{className: Any ->
//example value "com.example.HelloWorldVerticle
//full class name
vertx.deployVerticle(className as String)
}
}
}
super.start(startFuture)
}
}
这有点像袖口,但我知道你可以用它们的全名创建Verticle。
除了文件系统之外,您还可以通过其他几种方式获取配置。它在上面链接的文档!!