Unload bootstraping modules after startup

This commit is contained in:
Hubert Van De Walle 2020-09-30 18:30:19 +02:00
parent 69c91ec86a
commit dcc70aab3a
6 changed files with 42 additions and 22 deletions

View File

@ -6,7 +6,7 @@ import be.simplenotes.shared.config.ServerConfig
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
object Config { class Config {
//region Config loading //region Config loading
private val properties: Properties = javaClass private val properties: Properties = javaClass
.getResource("/application.properties") .getResource("/application.properties")

View File

@ -3,22 +3,29 @@ package be.simplenotes.app
import be.simplenotes.app.extensions.addShutdownHook 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.migrationModule
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
import org.koin.core.context.unloadKoinModules
fun main() = startKoin { fun main() {
modules( startKoin {
serverModule, modules(
persistanceModule, serverModule,
configModule, persistanceModule,
baseModule, migrationModule,
userModule, configModule,
noteModule, baseModule,
settingsModule, userModule,
domainModule, noteModule,
searchModule, settingsModule,
apiModule, domainModule,
jsonModule searchModule,
) apiModule,
}.addShutdownHook() jsonModule
)
}.addShutdownHook()
unloadKoinModules(listOf(migrationModule, configModule))
}

View File

@ -2,9 +2,17 @@ package be.simplenotes.app.modules
import be.simplenotes.app.Config import be.simplenotes.app.Config
import org.koin.dsl.module import org.koin.dsl.module
import org.koin.dsl.onClose
val configModule = module { val configModule = module {
single { Config.dataSourceConfig } single { Config() } onClose {
single { Config.jwtConfig } println("Unloaded config")
single { Config.serverConfig } println("Unloaded config")
println("Unloaded config")
println("Unloaded config")
}
single { get<Config>().dataSourceConfig }
single { get<Config>().jwtConfig }
single { get<Config>().serverConfig }
} }

View File

@ -29,10 +29,13 @@ private fun hikariDataSource(conf: DataSourceConfig): HikariDataSource {
return HikariDataSource(hikariConfig) return HikariDataSource(hikariConfig)
} }
val migrationModule = module {
single<DbMigrations> { DbMigrationsImpl(get(), get()) }
}
val persistanceModule = module { 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 { hikariDataSource(get()) } bind DataSource::class onClose { it?.close() } single { hikariDataSource(get()) } bind DataSource::class onClose { it?.close() }
single { single {
get<DbMigrations>().migrate() get<DbMigrations>().migrate()

View File

@ -4,6 +4,7 @@ import be.simplenotes.domain.model.*
import be.simplenotes.domain.usecases.repositories.NoteRepository import be.simplenotes.domain.usecases.repositories.NoteRepository
import be.simplenotes.domain.usecases.repositories.UserRepository import be.simplenotes.domain.usecases.repositories.UserRepository
import be.simplenotes.persistance.DbMigrations import be.simplenotes.persistance.DbMigrations
import be.simplenotes.persistance.migrationModule
import be.simplenotes.persistance.persistanceModule import be.simplenotes.persistance.persistanceModule
import be.simplenotes.shared.config.DataSourceConfig import be.simplenotes.shared.config.DataSourceConfig
import me.liuwj.ktorm.database.* import me.liuwj.ktorm.database.*
@ -27,7 +28,7 @@ internal class NoteRepositoryImplTest {
} }
private val koinApp = koinApplication { private val koinApp = koinApplication {
modules(persistanceModule, testModule) modules(persistanceModule, migrationModule, testModule)
} }
private fun dataSourceConfig() = DataSourceConfig( private fun dataSourceConfig() = DataSourceConfig(

View File

@ -3,6 +3,7 @@ package be.simplenotes.persistance.users
import be.simplenotes.domain.model.User import be.simplenotes.domain.model.User
import be.simplenotes.domain.usecases.repositories.UserRepository import be.simplenotes.domain.usecases.repositories.UserRepository
import be.simplenotes.persistance.DbMigrations import be.simplenotes.persistance.DbMigrations
import be.simplenotes.persistance.migrationModule
import be.simplenotes.persistance.persistanceModule import be.simplenotes.persistance.persistanceModule
import be.simplenotes.shared.config.DataSourceConfig import be.simplenotes.shared.config.DataSourceConfig
import me.liuwj.ktorm.database.* import me.liuwj.ktorm.database.*
@ -28,7 +29,7 @@ internal class UserRepositoryImplTest {
} }
private val koinApp = koinApplication { private val koinApp = koinApplication {
modules(persistanceModule, testModule) modules(persistanceModule, migrationModule, testModule)
} }
private fun dataSourceConfig() = DataSourceConfig( private fun dataSourceConfig() = DataSourceConfig(