Configuration des applications Kotlin : approches modernes et bibliothèques
Une configuration judicieuse est la clé de la flexibilité et de la sécurité de toute application. Dans l'écosystème Kotlin, le développeur dispose d'un large éventail d'outils : des fichiers HOCON classiques aux frameworks puissants avec support de l'injection de dépendances (DI). Dans cet article, nous analyserons les bibliothèques clés, les modèles et les meilleures pratiques de gestion de configuration dans les applications Kotlin.
1. Typesafe Config (HOCON) — standard de l'industrie
Typesafe Config est la bibliothèque la plus populaire pour la configuration des applications JVM. Elle utilise le format HOCON (Human-Optimized Config Object Notation), qui prend en charge l'héritage, l'inclusion de fichiers et les variables d'environnement.
Ajout de la dépendance (Gradle)
dependencies { implementation("com.typesafe:config:1.4.3")}Exemple de fichier de configuration (application.conf)
app { name = "MyKotlinApp" version = "1.0.0" database { url = "jdbc:postgresql://localhost:5432/mydb" user = ${?DB_USER} # surchargé depuis l'env password = ${?DB_PASSWORD} } features { enableLogging = true maxRetries = 3 }}Chargement en Kotlin
import com.typesafe.config.ConfigFactory
fun main() { val config = ConfigFactory.load() val appName = config.getString("app.name") val dbUrl = config.getString("app.database.url") val retries = config.getInt("app.features.maxRetries") println("App: $appName, DB: $dbUrl, Retries: $retries")}Avantages : léger, ne nécessite pas de DI, prend en charge ${?ENV_VAR} pour la substitution de variables d'environnement. Idéal pour les microservices et les utilitaires en ligne de commande (CLI).
2. Spring Boot + @ConfigurationProperties
Si vous utilisez Spring Boot, le support intégré de la configuration via application.yml ou application.properties est un choix idéal. La bibliothèque mappe automatiquement les propriétés sur les classes de données Kotlin.
Exemple application.yml
app: name: "SpringKotlinApp" database: url: "jdbc:mysql://localhost:3306/db" pool-size: 10 retry: enabled: true max-attempts: 3Classe de données Kotlin pour la configuration
import org.springframework.boot.context.properties.ConfigurationPropertiesimport org.springframework.stereotype.Component
@Component@ConfigurationProperties(prefix = "app")data class AppConfig( val name: String = "", val database: DatabaseConfig = DatabaseConfig(), val retry: RetryConfig = RetryConfig())
data class DatabaseConfig( val url: String = "", val poolSize: Int = 5)
data class RetryConfig( val enabled: Boolean = false, val maxAttempts: Int = 1)Utilisation dans un service
@Serviceclass UserService(private val config: AppConfig) { fun printConfig() { println("DB URL: ${config.database.url}") println("Retry enabled: ${config.retry.enabled}") }}Avantages : intégration avec DI, validation via @Validated, support des profils (dev/prod). Inconvénients : dépendance à Spring.
3. Ktor + HOCON (pour les applications Ktor)
Pour les applications serveur avec Ktor, la configuration est souvent construite via le module intégré HOCONApplicationConfig. C'est une alternative légère à Spring.
Installation
dependencies { implementation("io.ktor:ktor-server-core:2.3.0") implementation("io.ktor:ktor-server-config-hocon:2.3.0")}Fichier application.conf (Ktor)
ktor { deployment { port = 8080 host = "0.0.0.0" } application { modules = [ "com.example.ApplicationKt.module" ] } custom { apiKey = ${?API_KEY} timeoutMs = 5000 }}Chargement de la configuration dans le code
fun App Aussi dans la bibliothèque
godotenv Go : guide complet avec exemples pratiques
Surveillance des applications C++ : bibliothèque metrics pour la collecte de métriques
Turbine Kotlin : guide complet avec exemples de test Flow