Merge pull request #44 from InsanusMokrassar/2.3.0

2.3.0
This commit is contained in:
InsanusMokrassar 2022-09-04 16:10:09 +06:00 committed by GitHub
commit 1b3c479766
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 11 deletions

View File

@ -1,5 +1,10 @@
# Changelog # Changelog
## 2.3.0
* `Bot`:
* Add option `reconnectOptions` in database config
## 2.2.0 ## 2.2.0
* `Versions`: * `Versions`:

View File

@ -0,0 +1,9 @@
package dev.inmo.plagubot.config
import kotlinx.serialization.Serializable
@Serializable
data class DBConnectOptions(
val attempts: Int = 3,
val delay: Long = 1000L
)

View File

@ -1,11 +1,15 @@
package dev.inmo.plagubot.config package dev.inmo.plagubot.config
import dev.inmo.kslog.common.e
import dev.inmo.kslog.common.logger
import kotlinx.coroutines.delay
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.transactions.transactionManager import org.jetbrains.exposed.sql.transactions.transactionManager
import org.koin.core.scope.Scope import org.koin.core.scope.Scope
import org.sqlite.JDBC import org.sqlite.JDBC
import java.lang.Exception
import java.sql.Connection import java.sql.Connection
inline val Scope.database: Database? inline val Scope.database: Database?
@ -16,15 +20,24 @@ data class DatabaseConfig(
val url: String = "jdbc:sqlite:file:test?mode=memory&cache=shared", val url: String = "jdbc:sqlite:file:test?mode=memory&cache=shared",
val driver: String = JDBC::class.qualifiedName!!, val driver: String = JDBC::class.qualifiedName!!,
val username: String = "", val username: String = "",
val password: String = "" val password: String = "",
val reconnectOptions: DBConnectOptions? = DBConnectOptions()
) { ) {
@Transient @Transient
val database: Database = Database.connect( val database: Database = (0 until (reconnectOptions ?.attempts ?: 1)).firstNotNullOfOrNull {
url, runCatching {
driver, Database.connect(
username, url,
password driver,
).also { username,
it.transactionManager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE // Or Connection.TRANSACTION_READ_UNCOMMITTED password
} ).also {
it.transactionManager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE // Or Connection.TRANSACTION_READ_UNCOMMITTED
it.connector().close()
}
}.onFailure {
logger.e(it)
Thread.sleep(reconnectOptions ?.delay ?: return@onFailure)
}.getOrNull()
} ?: error("Unable to create database")
} }

View File

@ -5,4 +5,4 @@ kotlin.js.generate.externals=true
kotlin.incremental=true kotlin.incremental=true
group=dev.inmo group=dev.inmo
version=2.2.0 version=2.3.0

View File

@ -4,7 +4,10 @@
"driver": "org.sqlite.JDBC", "driver": "org.sqlite.JDBC",
"username": "OPTIONAL username", "username": "OPTIONAL username",
"password": "OPTIONAL password", "password": "OPTIONAL password",
"initAutomatically": false "reconnectOptions": {
"attempts": 3,
"delay": 1000
}
}, },
"botToken": "1234567890:ABCDEFGHIJKLMNOP_qrstuvwxyz12345678", "botToken": "1234567890:ABCDEFGHIJKLMNOP_qrstuvwxyz12345678",
"plugins": [ "plugins": [