mirror of
https://github.com/gotson/komga.git
synced 2025-12-20 07:23:34 +01:00
feat: expose sqlite pragma configuration
This commit is contained in:
parent
775dd5c666
commit
3c5143071c
2 changed files with 17 additions and 4 deletions
|
|
@ -4,7 +4,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties
|
||||||
import org.springframework.boot.convert.DurationUnit
|
import org.springframework.boot.convert.DurationUnit
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import org.springframework.validation.annotation.Validated
|
import org.springframework.validation.annotation.Validated
|
||||||
import org.sqlite.SQLiteConfig.TransactionMode
|
import org.sqlite.SQLiteConfig.JournalMode
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
import java.time.temporal.ChronoUnit
|
import java.time.temporal.ChronoUnit
|
||||||
import javax.validation.constraints.NotBlank
|
import javax.validation.constraints.NotBlank
|
||||||
|
|
@ -75,7 +75,12 @@ class KomgaProperties {
|
||||||
@get:Positive
|
@get:Positive
|
||||||
var maxPoolSize: Int = 8
|
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 {
|
class Lucene {
|
||||||
|
|
|
||||||
|
|
@ -18,14 +18,22 @@ class DataSourcesConfiguration(
|
||||||
@Primary
|
@Primary
|
||||||
fun sqliteDataSource(): DataSource {
|
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()
|
val sqliteUdfDataSource = DataSourceBuilder.create()
|
||||||
.driverClassName("org.sqlite.JDBC")
|
.driverClassName("org.sqlite.JDBC")
|
||||||
.url("jdbc:sqlite:${komgaProperties.database.file}")
|
.url("jdbc:sqlite:${komgaProperties.database.file}$extraPragmas")
|
||||||
.type(SqliteUdfDataSource::class.java)
|
.type(SqliteUdfDataSource::class.java)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
sqliteUdfDataSource.setEnforceForeignKeys(true)
|
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 =
|
val poolSize =
|
||||||
if (komgaProperties.database.file.contains(":memory:")) 1
|
if (komgaProperties.database.file.contains(":memory:")) 1
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue