ktor hocon 配置不适用于一个密码变量
ktor hocon configuration not working for one password variable
我正在设置一个与 docker 中的 postgres 容器连接的 ktor api。当我硬编码时,我可以让一切正常工作。当我尝试使用 hocon 配置和打印值时,我可以看到我的 dburl 和 dbuser,但是当我打印我的 dbpassword 时,我得到一个类似值的地址。
这是我的 hocon 配置:
ktor {
deployment {
port = 8080
port = ${?PORT}
}
application {
modules = [ com.personal.ApplicationKt.module ]
}
security {
ssl {
keystore = ""
}
}
}
jwt {
secret = "redacted"
issuer = "https://jwt-provider-domain/"
audience = "jwt-audience"
realm = "ktor sample app"
}
db {
jdbcUrl = "jdbc:postgresql://docker-compose-db-name:5432/db_name"
dbUser = "redacted"
dbPassword = "redacted_password"
}
这是我的应用程序代码,它试图将这些值用于 loading/migrating 我的数据库:
private val appConfig = HoconApplicationConfig(ConfigFactory.load())
private val dbUrl = appConfig.property("db.jdbcUrl").getString()
private val dbUser = appConfig.property("db.dbUser").getString()
private val dbPassword = appConfig.property("db.dbPassword").toString()
fun init() {
Database.connect(hikari())
// auto migration when spinning up db
println("URL: $dbUrl")
println("USER: $dbUser")
println("PASSWORD: $dbPassword")
val flyway = Flyway.configure().dataSource(dbUrl, dbUser, dbPassword).load()
flyway.migrate()
}
private fun hikari(): HikariDataSource {
val config = HikariConfig()
println("URL: $dbUrl")
println("USER: $dbUser")
println("PASSWORD: $dbPassword")
config.driverClassName = "org.postgresql.Driver"
config.jdbcUrl = dbUrl
config.username = dbUser
config.password = dbPassword
config.maximumPoolSize = 3
// auto commit sql operations
config.isAutoCommit = false
// no dirty reads allowed. Only see data that was committed prior to start of statement
config.transactionIsolation = "TRANSACTION_READ_COMMITTED"
config.validate()
return HikariDataSource(config)
}
那三行打印出来:
“URL: jdbc:postgresql://docker-compose-db-name:5432/db_name”
“用户:已编辑”
“密码:io.ktor.config.HoconApplicationConfig$HoconApplicationConfigValue@4b9df8a”
然后我得到了编辑失败的身份验证。当我对值进行硬编码时,它可以 100% 工作。我的密码是否过于隐晦或包含无法在 hoconstring 中使用的值?
问题是最后一次获取 db.dbPassword
值的调用是 toString
而不是 getString
。
我正在设置一个与 docker 中的 postgres 容器连接的 ktor api。当我硬编码时,我可以让一切正常工作。当我尝试使用 hocon 配置和打印值时,我可以看到我的 dburl 和 dbuser,但是当我打印我的 dbpassword 时,我得到一个类似值的地址。
这是我的 hocon 配置:
ktor {
deployment {
port = 8080
port = ${?PORT}
}
application {
modules = [ com.personal.ApplicationKt.module ]
}
security {
ssl {
keystore = ""
}
}
}
jwt {
secret = "redacted"
issuer = "https://jwt-provider-domain/"
audience = "jwt-audience"
realm = "ktor sample app"
}
db {
jdbcUrl = "jdbc:postgresql://docker-compose-db-name:5432/db_name"
dbUser = "redacted"
dbPassword = "redacted_password"
}
这是我的应用程序代码,它试图将这些值用于 loading/migrating 我的数据库:
private val appConfig = HoconApplicationConfig(ConfigFactory.load())
private val dbUrl = appConfig.property("db.jdbcUrl").getString()
private val dbUser = appConfig.property("db.dbUser").getString()
private val dbPassword = appConfig.property("db.dbPassword").toString()
fun init() {
Database.connect(hikari())
// auto migration when spinning up db
println("URL: $dbUrl")
println("USER: $dbUser")
println("PASSWORD: $dbPassword")
val flyway = Flyway.configure().dataSource(dbUrl, dbUser, dbPassword).load()
flyway.migrate()
}
private fun hikari(): HikariDataSource {
val config = HikariConfig()
println("URL: $dbUrl")
println("USER: $dbUser")
println("PASSWORD: $dbPassword")
config.driverClassName = "org.postgresql.Driver"
config.jdbcUrl = dbUrl
config.username = dbUser
config.password = dbPassword
config.maximumPoolSize = 3
// auto commit sql operations
config.isAutoCommit = false
// no dirty reads allowed. Only see data that was committed prior to start of statement
config.transactionIsolation = "TRANSACTION_READ_COMMITTED"
config.validate()
return HikariDataSource(config)
}
那三行打印出来: “URL: jdbc:postgresql://docker-compose-db-name:5432/db_name” “用户:已编辑” “密码:io.ktor.config.HoconApplicationConfig$HoconApplicationConfigValue@4b9df8a”
然后我得到了编辑失败的身份验证。当我对值进行硬编码时,它可以 100% 工作。我的密码是否过于隐晦或包含无法在 hoconstring 中使用的值?
问题是最后一次获取 db.dbPassword
值的调用是 toString
而不是 getString
。