feat: expose sqlite pragma configuration

This commit is contained in:
Gauthier Roebroeck 2022-07-25 10:08:02 +08:00
parent 775dd5c666
commit 3c5143071c
2 changed files with 17 additions and 4 deletions

View file

@ -4,7 +4,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.convert.DurationUnit
import org.springframework.stereotype.Component
import org.springframework.validation.annotation.Validated
import org.sqlite.SQLiteConfig.TransactionMode
import org.sqlite.SQLiteConfig.JournalMode
import java.time.Duration
import java.time.temporal.ChronoUnit
import javax.validation.constraints.NotBlank
@ -75,7 +75,12 @@ class KomgaProperties {
@get:Positive
var maxPoolSize: Int = 8
var transactionMode: TransactionMode = TransactionMode.DEFERRED
var journalMode: JournalMode? = null
@DurationUnit(ChronoUnit.SECONDS)
var busyTimeout: Duration? = null
var pragmas: Map<String, String> = emptyMap()
}
class Lucene {

View file

@ -18,14 +18,22 @@ class DataSourcesConfiguration(
@Primary
fun sqliteDataSource(): DataSource {
val extraPragmas = komgaProperties.database.pragmas.let {
if (it.isEmpty()) ""
else "?" + it.map { (key, value) -> "$key=$value" }.joinToString(separator = "&")
}
val sqliteUdfDataSource = DataSourceBuilder.create()
.driverClassName("org.sqlite.JDBC")
.url("jdbc:sqlite:${komgaProperties.database.file}")
.url("jdbc:sqlite:${komgaProperties.database.file}$extraPragmas")
.type(SqliteUdfDataSource::class.java)
.build()
sqliteUdfDataSource.setEnforceForeignKeys(true)
sqliteUdfDataSource.setTransactionMode(komgaProperties.database.transactionMode.name)
with(komgaProperties.database) {
journalMode?.let { sqliteUdfDataSource.setJournalMode(it.name) }
busyTimeout?.let { sqliteUdfDataSource.config.busyTimeout = it.toMillis().toInt() }
}
val poolSize =
if (komgaProperties.database.file.contains(":memory:")) 1