Kotlin ktor中的应用程序级事件未被调用
我目前正在使用Netty在ktor中试验应用程序事件。然而,唯一被调用的钩子是“ApplicationStarted”。我做错了什么 我在所有函数中设置了断点,进行了订阅,但并不是所有的事件侦听器都被调用。 我还试图在ktor文档中找到一些解释,但没有成功Kotlin ktor中的应用程序级事件未被调用,kotlin,netty,ktor,Kotlin,Netty,Ktor,我目前正在使用Netty在ktor中试验应用程序事件。然而,唯一被调用的钩子是“ApplicationStarted”。我做错了什么 我在所有函数中设置了断点,进行了订阅,但并不是所有的事件侦听器都被调用。 我还试图在ktor文档中找到一些解释,但没有成功 import io.ktor.application.* fun Application.events(){ environment.monitor.subscribe(ApplicationStarting, ::onStarti
import io.ktor.application.*
fun Application.events(){
environment.monitor.subscribe(ApplicationStarting, ::onStarting)
environment.monitor.subscribe(ApplicationStarted, ::onStarted)
environment.monitor.subscribe(ApplicationStopping, ::onStopping)
environment.monitor.subscribe(ApplicationStopped, ::onStopped)
environment.monitor.subscribe(ApplicationStopPreparing, ::onPrepareStop)
}
private fun onStarting(app: Application){
app.log.info("Application starting")
}
private fun onStarted(app: Application){
app.log.info("Application started")
}
private fun onStopping(app: Application){
app.log.info("Application stopping")
}
private fun onStopped(app: Application){
app.log.info("Application stopped")
}
private fun onPrepareStop(env: ApplicationEnvironment){
env.log.info("Preparing App Stop")
}
“应用程序已启动”显示在日志消息中,但没有其他输出
我做得有多糟,或者这是一个bug?好的,我一直在研究这个问题,发现调用的应用程序级事件的数量取决于您使用的服务器。以下嵌入式服务器支持以下事件: +--------+----------+---------+---------------+----------+---------+ | Engine | Starting | Started | StopPreparing | Stopping | Stopped | +--------+----------+---------+---------------+----------+---------+ | Netty | NO | YES | NO | NO | NO | | CIO | NO | YES | YES | YES | YES | | Tomcat | NO | YES | NO | NO | NO | | Jetty | NO | YES | NO | NO | NO | +--------+----------+---------+---------------+----------+---------+
private fun onStarted(app: Application){
Runtime.getRuntime()?.addShutdownHook( Thread {
app.environment.monitor.raise(ApplicationStopped, app)
})
app.log.info("Application started")
}