From dcc70aab3af0f49cbe7d977847b0dd08a06590f8 Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Wed, 30 Sep 2020 18:30:19 +0200 Subject: [PATCH] Unload bootstraping modules after startup --- app/src/main/kotlin/Config.kt | 2 +- app/src/main/kotlin/SimpleNotes.kt | 37 +++++++++++-------- app/src/main/kotlin/modules/ConfigModule.kt | 14 +++++-- .../src/main/kotlin/PersistanceModule.kt | 5 ++- .../kotlin/notes/NoteRepositoryImplTest.kt | 3 +- .../kotlin/users/UserRepositoryImplTest.kt | 3 +- 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/app/src/main/kotlin/Config.kt b/app/src/main/kotlin/Config.kt index b7d9980..b391ccd 100644 --- a/app/src/main/kotlin/Config.kt +++ b/app/src/main/kotlin/Config.kt @@ -6,7 +6,7 @@ import be.simplenotes.shared.config.ServerConfig import java.util.* import java.util.concurrent.TimeUnit -object Config { +class Config { //region Config loading private val properties: Properties = javaClass .getResource("/application.properties") diff --git a/app/src/main/kotlin/SimpleNotes.kt b/app/src/main/kotlin/SimpleNotes.kt index ad992d8..bd68ec0 100644 --- a/app/src/main/kotlin/SimpleNotes.kt +++ b/app/src/main/kotlin/SimpleNotes.kt @@ -3,22 +3,29 @@ package be.simplenotes.app import be.simplenotes.app.extensions.addShutdownHook import be.simplenotes.app.modules.* import be.simplenotes.domain.domainModule +import be.simplenotes.persistance.migrationModule import be.simplenotes.persistance.persistanceModule import be.simplenotes.search.searchModule import org.koin.core.context.startKoin +import org.koin.core.context.unloadKoinModules -fun main() = startKoin { - modules( - serverModule, - persistanceModule, - configModule, - baseModule, - userModule, - noteModule, - settingsModule, - domainModule, - searchModule, - apiModule, - jsonModule - ) -}.addShutdownHook() +fun main() { + startKoin { + modules( + serverModule, + persistanceModule, + migrationModule, + configModule, + baseModule, + userModule, + noteModule, + settingsModule, + domainModule, + searchModule, + apiModule, + jsonModule + ) + }.addShutdownHook() + + unloadKoinModules(listOf(migrationModule, configModule)) +} diff --git a/app/src/main/kotlin/modules/ConfigModule.kt b/app/src/main/kotlin/modules/ConfigModule.kt index 65043d5..f0faef1 100644 --- a/app/src/main/kotlin/modules/ConfigModule.kt +++ b/app/src/main/kotlin/modules/ConfigModule.kt @@ -2,9 +2,17 @@ package be.simplenotes.app.modules import be.simplenotes.app.Config import org.koin.dsl.module +import org.koin.dsl.onClose val configModule = module { - single { Config.dataSourceConfig } - single { Config.jwtConfig } - single { Config.serverConfig } + single { Config() } onClose { + println("Unloaded config") + println("Unloaded config") + println("Unloaded config") + println("Unloaded config") + } + + single { get().dataSourceConfig } + single { get().jwtConfig } + single { get().serverConfig } } diff --git a/persistance/src/main/kotlin/PersistanceModule.kt b/persistance/src/main/kotlin/PersistanceModule.kt index 8fc35f5..91be1a8 100644 --- a/persistance/src/main/kotlin/PersistanceModule.kt +++ b/persistance/src/main/kotlin/PersistanceModule.kt @@ -29,10 +29,13 @@ private fun hikariDataSource(conf: DataSourceConfig): HikariDataSource { return HikariDataSource(hikariConfig) } +val migrationModule = module { + single { DbMigrationsImpl(get(), get()) } +} + val persistanceModule = module { single { UserRepositoryImpl(get()) } single { NoteRepositoryImpl(get()) } - single { DbMigrationsImpl(get(), get()) } single { hikariDataSource(get()) } bind DataSource::class onClose { it?.close() } single { get().migrate() diff --git a/persistance/src/test/kotlin/notes/NoteRepositoryImplTest.kt b/persistance/src/test/kotlin/notes/NoteRepositoryImplTest.kt index 46a6298..fcd06a2 100644 --- a/persistance/src/test/kotlin/notes/NoteRepositoryImplTest.kt +++ b/persistance/src/test/kotlin/notes/NoteRepositoryImplTest.kt @@ -4,6 +4,7 @@ import be.simplenotes.domain.model.* import be.simplenotes.domain.usecases.repositories.NoteRepository import be.simplenotes.domain.usecases.repositories.UserRepository import be.simplenotes.persistance.DbMigrations +import be.simplenotes.persistance.migrationModule import be.simplenotes.persistance.persistanceModule import be.simplenotes.shared.config.DataSourceConfig import me.liuwj.ktorm.database.* @@ -27,7 +28,7 @@ internal class NoteRepositoryImplTest { } private val koinApp = koinApplication { - modules(persistanceModule, testModule) + modules(persistanceModule, migrationModule, testModule) } private fun dataSourceConfig() = DataSourceConfig( diff --git a/persistance/src/test/kotlin/users/UserRepositoryImplTest.kt b/persistance/src/test/kotlin/users/UserRepositoryImplTest.kt index e892820..c888f1d 100644 --- a/persistance/src/test/kotlin/users/UserRepositoryImplTest.kt +++ b/persistance/src/test/kotlin/users/UserRepositoryImplTest.kt @@ -3,6 +3,7 @@ package be.simplenotes.persistance.users import be.simplenotes.domain.model.User import be.simplenotes.domain.usecases.repositories.UserRepository import be.simplenotes.persistance.DbMigrations +import be.simplenotes.persistance.migrationModule import be.simplenotes.persistance.persistanceModule import be.simplenotes.shared.config.DataSourceConfig import me.liuwj.ktorm.database.* @@ -28,7 +29,7 @@ internal class UserRepositoryImplTest { } private val koinApp = koinApplication { - modules(persistanceModule, testModule) + modules(persistanceModule, migrationModule, testModule) } private fun dataSourceConfig() = DataSourceConfig(