@@ -15,6 +15,7 @@ import net.mamoe.mirai.utils.error
1515import net.mamoe.mirai.utils.info
1616import net.mamoe.mirai.utils.verbose
1717import net.mamoe.mirai.utils.warning
18+ import okhttp3.internal.closeQuietly
1819import org.jetbrains.exposed.sql.*
1920import org.jetbrains.exposed.sql.Database
2021import org.jetbrains.exposed.sql.statements.StatementContext
@@ -34,6 +35,7 @@ object Database {
3435 }
3536
3637 private lateinit var db : Database
38+ private lateinit var hikariSource: HikariDataSource
3739 private var connectionStatus: ConnectionStatus = ConnectionStatus .DISCONNECTED
3840
3941 fun <T > query (block : (Transaction ) -> T ) : T ? = if (connectionStatus == ConnectionStatus .DISCONNECTED ) {
@@ -47,7 +49,9 @@ object Database {
4749 } else newSuspendedTransaction(context = Dispatchers .IO , db = db) { block(this ) }
4850
4951 fun connect () {
50- db = Database .connect(hikariDataSourceProvider())
52+ db = Database .connect(hikariDataSourceProvider().also {
53+ hikariSource = it
54+ })
5155 connectionStatus = ConnectionStatus .CONNECTED
5256 PluginMain .logger.info { " Database ${PluginConfig .database.table} is connected." }
5357 initDatabase()
@@ -65,6 +69,11 @@ object Database {
6569
6670 } }
6771
72+ fun close () {
73+ connectionStatus = ConnectionStatus .DISCONNECTED
74+ hikariSource.closeQuietly()
75+ }
76+
6877 private fun hikariDataSourceProvider () : HikariDataSource = HikariDataSource (HikariConfig ().apply {
6978 when {
7079 PluginConfig .database.address == " " -> throw InvalidDatabaseConfigException (" Database address is not set in config file ${PluginConfig .saveName} ." )
@@ -84,6 +93,7 @@ object Database {
8493 username = PluginConfig .database.user
8594 password = PluginConfig .database.password
8695 maximumPoolSize = PluginConfig .database.maximumPoolSize!!
96+ poolName = " SCTimetableDB Pool"
8797 })
8898
8999}
0 commit comments