Хорошо. Я изучил это и обнаружил, что количество вызванных событий уровня приложения зависит от сервера, который вы используете.Следующие встроенные серверы поддерживают следующие события:
+--------+----------+---------+---------------+----------+---------+
| 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 |
+--------+----------+---------+---------------+----------+---------+
Протестировано на Ktor версии 1.1.2
Таким образом, в настоящее время кажется, что если вы хотите отвечать на события остановки приложений, вам следует использовать CIO в качествесервер.
РЕДАКТИРОВАТЬ:
CIO не поддерживает HTTPS на данный момент, поэтому при необходимости вы должны придерживаться одного из трех других.Однако вы можете использовать обработчик завершения работы JVM, чтобы вызвать остановленное событие самостоятельно.Помните, что обработчики вызываются в другом потоке.
private fun onStarted(app: Application){
Runtime.getRuntime()?.addShutdownHook( Thread {
app.environment.monitor.raise(ApplicationStopped, app)
})
app.log.info("Application started")
}