Proper shutdown

This commit is contained in:
Hubert Van De Walle 2020-09-30 00:13:16 +02:00
parent 1bc45461c3
commit 69c91ec86a
5 changed files with 35 additions and 21 deletions

View File

@ -1,25 +1,24 @@
package be.simplenotes.app package be.simplenotes.app
import be.simplenotes.app.extensions.addShutdownHook
import be.simplenotes.app.modules.* import be.simplenotes.app.modules.*
import be.simplenotes.domain.domainModule import be.simplenotes.domain.domainModule
import be.simplenotes.persistance.persistanceModule import be.simplenotes.persistance.persistanceModule
import be.simplenotes.search.searchModule import be.simplenotes.search.searchModule
import org.koin.core.context.startKoin import org.koin.core.context.startKoin
fun main() { fun main() = startKoin {
startKoin { modules(
modules( serverModule,
serverModule, persistanceModule,
persistanceModule, configModule,
configModule, baseModule,
baseModule, userModule,
userModule, noteModule,
noteModule, settingsModule,
settingsModule, domainModule,
domainModule, searchModule,
searchModule, apiModule,
apiModule, jsonModule
jsonModule )
) }.addShutdownHook()
}
}

View File

@ -0,0 +1,12 @@
package be.simplenotes.app.extensions
import org.koin.core.KoinApplication
import kotlin.concurrent.thread
fun KoinApplication.addShutdownHook() {
Runtime.getRuntime().addShutdownHook(
thread(start = false) {
close()
}
)
}

View File

@ -18,10 +18,11 @@ import org.http4k.server.asServer
import org.koin.core.qualifier.named import org.koin.core.qualifier.named
import org.koin.core.qualifier.qualifier import org.koin.core.qualifier.qualifier
import org.koin.dsl.module import org.koin.dsl.module
import org.koin.dsl.onClose
import org.http4k.server.ServerConfig as Http4kServerConfig import org.http4k.server.ServerConfig as Http4kServerConfig
val serverModule = module { val serverModule = module {
single(createdAtStart = true) { Server(get(), get()).start() } single(createdAtStart = true) { Server(get(), get()).start() } onClose { it?.stop() }
single { get<RoutingHttpHandler>().asServer(get()) } single { get<RoutingHttpHandler>().asServer(get()) }
single<Http4kServerConfig> { single<Http4kServerConfig> {
val config = get<ServerConfig>() val config = get<ServerConfig>()

View File

@ -5,4 +5,4 @@ rm app/src/main/resources/static/styles*
yarn --cwd css run css-purge \ yarn --cwd css run css-purge \
&& docker build -t hubv/simplenotes:latest . \ && docker build -t hubv/simplenotes:latest . \
# && docker push hubv/simplenotes:latest && docker push hubv/simplenotes:latest

View File

@ -7,8 +7,10 @@ import be.simplenotes.persistance.users.UserRepositoryImpl
import be.simplenotes.shared.config.DataSourceConfig import be.simplenotes.shared.config.DataSourceConfig
import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource import com.zaxxer.hikari.HikariDataSource
import me.liuwj.ktorm.database.* import me.liuwj.ktorm.database.Database
import org.koin.dsl.bind
import org.koin.dsl.module import org.koin.dsl.module
import org.koin.dsl.onClose
import javax.sql.DataSource import javax.sql.DataSource
interface DbMigrations { interface DbMigrations {
@ -31,7 +33,7 @@ val persistanceModule = module {
single<UserRepository> { UserRepositoryImpl(get()) } single<UserRepository> { UserRepositoryImpl(get()) }
single<NoteRepository> { NoteRepositoryImpl(get()) } single<NoteRepository> { NoteRepositoryImpl(get()) }
single<DbMigrations> { DbMigrationsImpl(get(), get()) } single<DbMigrations> { DbMigrationsImpl(get(), get()) }
single<DataSource> { hikariDataSource(get()) } single { hikariDataSource(get()) } bind DataSource::class onClose { it?.close() }
single { single {
get<DbMigrations>().migrate() get<DbMigrations>().migrate()
Database.connect(get<DataSource>()) Database.connect(get<DataSource>())