diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/configuration/KomgaProperties.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/configuration/KomgaProperties.kt index 53fea8e35..d19768017 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/configuration/KomgaProperties.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/configuration/KomgaProperties.kt @@ -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 = emptyMap() } class Lucene { diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/datasource/DataSourcesConfiguration.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/datasource/DataSourcesConfiguration.kt index 2fe078bf0..b37d20fe1 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/datasource/DataSourcesConfiguration.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/datasource/DataSourcesConfiguration.kt @@ -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