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.concurrent.TimeUnit
object Config {
class Config {
//region Config loading
private val properties: Properties = javaClass
.getResource("/application.properties")

View File

@ -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))
}

View File

@ -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<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)
}
val migrationModule = module {
single<DbMigrations> { DbMigrationsImpl(get(), get()) }
}
val persistanceModule = module {
single<UserRepository> { UserRepositoryImpl(get()) }
single<NoteRepository> { NoteRepositoryImpl(get()) }
single<DbMigrations> { DbMigrationsImpl(get(), get()) }
single { hikariDataSource(get()) } bind DataSource::class onClose { it?.close() }
single {
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.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(

View File

@ -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(