我正在尝试从Ktor构建一个应用程序,最终应通过fatjar执行该应用程序。 Fatjar允许使用以下参数:
java -jar myApp.jar XXXXX YYYYY
我知道如何在主模块中获取XXXXX(通过使用简单的args [0]),但是我很难在Application模块中获取该值。
我想做这样的事情:
fun main(args:Array){
val port = System.getenv(“ PORT”)?. toInt()?:8080
val status = args [0]
embeddedServer(Netty,port = port,module =(Application :: mainModule()))。start(等待= true) }
有趣的Application.mainModule(){
routing {get("/status") {call.respondText(//status variable value from main function, contentType = ContentType.Text.Html)
}}
答案 0 :(得分:2)
要传递新的配置参数,您可以在它前面加上 -P:propName=
。
这样,如果您想从命令行传递一个名为 csv
的属性和一个值,您可以执行以下操作:
fun main(args: Array<String>) {
val csvFileName = "-P:csv=${args[0]}"
EngineMain.main(arrayOf(csvFileName))
}
您还可以通过将 args
用作命令行参数来传递参数,而无需修改 -P:csv=myfile.csv
。
然后,在您的模块中,您可以通过 environment.config.property("csv").getString()
访问它。
fun Application.module() {
val csvFileName = environment.config.property("csv").getString()
println(csvFileName)
}
您可以在 the official Ktor documentation 中阅读有关配置 Ktor 应用程序的更多信息。
答案 1 :(得分:0)
您可以将module
参数的方法引用替换为普通的lambda。
在此lambda中,您可以使用所需的参数来调用模块函数:
fun Application.mainModule(args: Array<String>) {
routing {
get("/status") {
//...
}
}
}
fun main(args: Array<String>) {
val server = embeddedServer(Netty, port = 8080) {
mainModule(args)
}
server.start(wait = true)
}