Configuração de aplicações Kotlin: abordagens modernas e bibliotecas
Uma configuração adequada é a chave para a flexibilidade e segurança de qualquer aplicação. No ecossistema Kotlin, o desenvolvedor tem à sua disposição uma ampla gama de ferramentas: desde arquivos HOCON clássicos até frameworks poderosos com suporte a DI. Neste artigo, abordaremos as principais bibliotecas, padrões e melhores práticas de gerenciamento de configuração em aplicações Kotlin.
1. Typesafe Config (HOCON) — padrão da indústria
Typesafe Config é a biblioteca mais popular para configuração de aplicações JVM. Ela utiliza o formato HOCON (Human-Optimized Config Object Notation), que suporta herança, inclusão de arquivos e variáveis de ambiente.
Adição (Gradle)
dependencies { implementation("com.typesafe:config:1.4.3")}Exemplo de arquivo de configuração (application.conf)
app { name = "MyKotlinApp" version = "1.0.0" database { url = "jdbc:postgresql://localhost:5432/mydb" user = ${?DB_USER} # sobrescrito a partir de env password = ${?DB_PASSWORD} } features { enableLogging = true maxRetries = 3 }}Carregamento em 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")}Vantagens: leve, não requer DI, suporta ${?ENV_VAR} para substituição de variáveis de ambiente. Ideal para microsserviços e utilitários CLI.
2. Spring Boot + @ConfigurationProperties
Se você usa Spring Boot, o suporte integrado de configuração através de application.yml ou application.properties é a escolha ideal. A biblioteca mapeia automaticamente as propriedades para classes de dados Kotlin.
Exemplo application.yml
app: name: "SpringKotlinApp" database: url: "jdbc:mysql://localhost:3306/db" pool-size: 10 retry: enabled: true max-attempts: 3Classe de dados Kotlin para configuração
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)Uso no serviço
@Serviceclass UserService(private val config: AppConfig) { fun printConfig() { println("DB URL: ${config.database.url}") println("Retry enabled: ${config.retry.enabled}") }}Prós: integração com DI, validação via @Validated, suporte a perfis (dev/prod). Contras: vinculação ao Spring.
3. Ktor + HOCON (para aplicações Ktor)
Para aplicações servidoras em Ktor, a configuração é frequentemente construída através do módulo embutido HOCONApplicationConfig. Esta é uma alternativa leve ao Spring.
Instalação
dependencies { implementation("io.ktor:ktor-server-core:2.3.0") implementation("io.ktor:ktor-server-config-hocon:2.3.0")}Arquivo application.conf (Ktor)
ktor { deployment { port = 8080 host = "0.0.0.0" } application { modules = [ "com.example.ApplicationKt.module" ] } custom { apiKey = ${?API_KEY} timeoutMs = 5000 }}Carregamento da configuração no código
fun App Também na biblioteca
JUnit 5 para Java: guia completo com exemplos
Biblioteca GraphQL TypeScript: guia completo de ferramentas
Cliente Elasticsearch para Go (Golang): guia completo para trabalhar com ES
Cliente Redis para PHP: Predis e PhpRedis – conexão e exemplos
Trabalhando com CSV em Go (Golang): guia completo para encoding/csv