-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApplicationLifeCycleModule.kt
41 lines (33 loc) · 1.34 KB
/
ApplicationLifeCycleModule.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package io.samuelagesilas.nbafinals.modules
import com.google.inject.AbstractModule
import com.google.inject.Inject
import com.zaxxer.hikari.HikariDataSource
import io.samuelagesilas.nbafinals.core.NBAFinalsApiVerticle
import io.vertx.core.Vertx
import redis.clients.jedis.Jedis
class ApplicationLifeCycleModule : AbstractModule() {
override fun configure() {
bind(ApplicationLifeCycleModule::class.java).asEagerSingleton()
}
}
class ApplicationLifeCycle @Inject constructor(private val vertx: Vertx,
private val verticle: NBAFinalsApiVerticle,
private val dataSource: HikariDataSource,
private val redis: Jedis,
private val serverConfig: ServerConfig) {
private val shutdownHook = object : Thread() {
override fun run() {
with(ApiServerShutdown(verticle, vertx), ::runAndWait)
HikariShutdown(dataSource)
RedisShutdown(redis)
}
private fun runAndWait(thread: Thread) {
thread.start()
thread.join(serverConfig.shutdownTimeoutSeconds)
}
}
fun start() {
Runtime.getRuntime().addShutdownHook(this.shutdownHook)
vertx.deployVerticle(verticle)
}
}