diff --git a/docs/Configuring-Suwayomi‐Server.md b/docs/Configuring-Suwayomi‐Server.md index d5a1690f..66238f1f 100644 --- a/docs/Configuring-Suwayomi‐Server.md +++ b/docs/Configuring-Suwayomi‐Server.md @@ -245,11 +245,13 @@ server.databaseType = H2 # H2, POSTGRESQL server.databaseUrl = "postgresql://localhost:5432/suwayomi" server.databaseUsername = "" server.databasePassword = "" +server.useHikariConnectionPool = true ``` - `server.databaseType` chooses which type of database to use. [H2](https://en.wikipedia.org/wiki/H2_Database_Engine) is the default; it is a simple file-based database for Java applications. Since it is only based on files without a server process, file corruption can be common when the server is not shut down properly. [PostgreSQL](https://en.wikipedia.org/wiki/PostgreSQL) is a popular cross-platform, stable database. To use PostgreSQL, you need to run an instance yourself. - `server.databaseUrl` the URL where to find the PostgreSQL server, including the database name. - `server.databaseUsername` the username with which to authenticate at the PostgreSQL instance. - `server.databasePassword` the username with which to authenticate at the PostgreSQL instance. +- `server.useHikariConnectionPool` use Hikari Connection Pool to connect to the database. **Note:** The example [docker-compose.yml file](https://github.com/Suwayomi/Suwayomi-Server-docker/blob/main/docker-compose.yml) contains everything you need to get started with Suwayomi+PostgreSQL. Please be aware that PostgreSQL support is currently still in beta. diff --git a/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt b/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt index d97e61d6..7ce3351d 100644 --- a/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt +++ b/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt @@ -914,6 +914,14 @@ class ServerConfig( key = "serveConversions" ) + val useHikariConnectionPool: MutableStateFlow by BooleanSetting( + protoNumber = 85, + group = SettingGroup.DATABASE, + defaultValue = true, + excludeFromBackup = true, + description = "Use Hikari Connection Pool to connect to the database.", + ) + /** ****************************************************************** **/ diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt index d1286b3b..e96e0382 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt @@ -125,6 +125,7 @@ data class DatabaseSettings( val databaseUrl: String, val databaseUsername: String, val databasePassword: String, + val useHikariConnectionPool: Boolean, ) val androidCompat by lazy { AndroidCompat() } @@ -398,17 +399,19 @@ fun applicationSetup() { serverConfig.databaseUrl, serverConfig.databaseUsername, serverConfig.databasePassword, + serverConfig.useHikariConnectionPool, ) { vargs -> DatabaseSettings( vargs[0] as DatabaseType, vargs[1] as String, vargs[2] as String, vargs[3] as String, + vargs[4] as Boolean, ) }.distinctUntilChanged(), - { (databaseType, databaseUrl, databaseUsername, _) -> + { (databaseType, databaseUrl, databaseUsername, _, hikariCp) -> logger.info { - "Database changed - type=$databaseType url=$databaseUrl, username=$databaseUsername, password=[REDACTED]" + "Database changed - type=$databaseType url=$databaseUrl, username=$databaseUsername, password=[REDACTED], hikaricp=$hikariCp" } databaseUp() diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt index b2e1685a..7171caae 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt @@ -95,12 +95,30 @@ object DBManager { preserveKeywordCasing = false } - // Create a new HikariCP pool - hikariDataSource = createHikariDataSource() + return if (serverConfig.useHikariConnectionPool.value) { + // Create a new HikariCP pool + hikariDataSource = createHikariDataSource() - return Database - .connect(hikariDataSource!!, databaseConfig = dbConfig) - .also { db = it } + return Database + .connect(hikariDataSource!!, databaseConfig = dbConfig) + } else { + when (serverConfig.databaseType.value) { + DatabaseType.POSTGRESQL -> + Database.connect( + "jdbc:${serverConfig.databaseUrl.value}", + "org.postgresql.Driver", + user = serverConfig.databaseUsername.value, + password = serverConfig.databasePassword.value, + databaseConfig = dbConfig, + ) + DatabaseType.H2 -> + Database.connect( + "jdbc:h2:${Injekt.get().dataRoot}/database", + "org.h2.Driver", + databaseConfig = dbConfig, + ) + } + }.also { db = it } } fun shutdown() {