meldestelle/shared-kernel/src/jvmMain/kotlin/at/mocode/shared/database/DatabaseConfig.kt
StefanMoCoAt 1ecac43d72 (vision) SCS/DDD
Service Discovery einführen
Consul als Service-Registry implementieren
Services für automatische Registrierung konfigurieren
Dynamisches Service-Routing im API-Gateway einrichten
Health-Checks für jeden Service implementieren
2025-07-21 23:54:13 +02:00

52 lines
2.3 KiB
Kotlin

package at.mocode.shared.database
import java.util.Properties
/**
* Konfiguration für die Datenbankverbindung.
* Parameter werden aus Umgebungsvariablen oder Property-Dateien gelesen.
*/
data class DatabaseConfig(
val jdbcUrl: String,
val username: String,
val password: String,
val driverClassName: String = "org.postgresql.Driver",
val maxPoolSize: Int = 10,
val minPoolSize: Int = 5,
val autoMigrate: Boolean = true
) {
companion object {
/**
* Erstellt eine Datenbank-Konfiguration aus Umgebungsvariablen und Properties.
* Wenn keine Umgebungsvariablen gefunden werden, werden Standardwerte für die Entwicklung verwendet.
*/
fun fromEnv(props: Properties = Properties()): DatabaseConfig {
// Priorität: Umgebungsvariablen > Properties > Standardwerte
val host = System.getenv("DB_HOST") ?: props.getProperty("database.host") ?: "localhost"
val port = System.getenv("DB_PORT") ?: props.getProperty("database.port") ?: "5432"
val database = System.getenv("DB_NAME") ?: props.getProperty("database.name") ?: "meldestelle_db"
val username = System.getenv("DB_USER") ?: props.getProperty("database.username") ?: "meldestelle_user"
val password = System.getenv("DB_PASSWORD") ?: props.getProperty("database.password") ?: "secure_password_change_me"
val maxPoolSize = System.getenv("DB_MAX_POOL_SIZE")?.toIntOrNull()
?: props.getProperty("database.maxPoolSize")?.toIntOrNull()
?: 10
val minPoolSize = System.getenv("DB_MIN_POOL_SIZE")?.toIntOrNull()
?: props.getProperty("database.minPoolSize")?.toIntOrNull()
?: 5
val autoMigrate = System.getenv("DB_AUTO_MIGRATE")?.toBoolean()
?: props.getProperty("database.autoMigrate")?.toBoolean()
?: true
return DatabaseConfig(
jdbcUrl = "jdbc:postgresql://$host:$port/$database",
username = username,
password = password,
driverClassName = "org.postgresql.Driver",
maxPoolSize = maxPoolSize,
minPoolSize = minPoolSize,
autoMigrate = autoMigrate
)
}
}
}