gpt4 book ai didi

database - Ktor与Gradle从环境变量运行配置 “Could not resolve substitution to a value”

转载 作者:行者123 更新时间:2023-12-03 05:27:49 26 4
gpt4 key购买 nike

我已经在Ktor中建立了一个服务器,并在Docker中建立了Postgres数据库,但是我认为能够在本地开发服务器而无需每次都重新构建Docker容器将很有用。

application.conf我有

// ...

db {
jdbcUrl = ${DATABASE_URL}
dbDriver = "org.postgresql.Driver"
dbDriver = ${?DATABASE_DRIVER}
dbUser = ${DATABASE_USER}
dbPassword = ${DATABASE_PASSWORD}
}

在我的DatabaseFactory中
object DatabaseFactory {

private val appConfig = HoconApplicationConfig(ConfigFactory.load())
private val dbUrl = appConfig.property("db.jdbcUrl").getString()
private val dbDriver = appConfig.property("db.dbDriver").getString()
private val dbUser = appConfig.property("db.dbUser").getString()
private val dbPassword = appConfig.property("db.dbPassword").getString()

fun init() {
Database.connect(hikari())

transaction {
val flyway = Flyway.configure().dataSource(dbUrl, dbUser, dbPassword).load()
flyway.migrate()
}
}

private fun hikari(): HikariDataSource {
val config = HikariConfig()
config.driverClassName = dbDriver
config.jdbcUrl = dbUrl
config.username = dbUser
config.password = dbPassword
config.maximumPoolSize = 3
config.isAutoCommit = false
config.transactionIsolation = "TRANSACTION_REPEATABLE_READ"
config.validate()
return HikariDataSource(config)
}

suspend fun <T> dbQuery(block: () -> T): T =
withContext(Dispatchers.IO) {
transaction { block() }
}

}

我已经使用以下环境配置编辑了Gradle运行配置:
DATABASE_URL=jdbc:h2:mem:default;DATABASE_DRIVER=org.h2.Driver;DATABASE_USER=test;DATABASE_PASSWORD=password

当我运行任务时,出现以下错误: Could not resolve substitution to a value: ${DATABASE_URL},但是如果我在第一行( private val appConfig)上设置一个断点并评估 System.getenv("DATABASE_URL"),它将被解析为正确的值。

我的问题是:
  • 为什么这不起作用?
  • 在不将其包装在容器中的情况下开发服务器的最佳(或最佳)设置是什么?最好不要在另一个容器中运行数据库。
  • 最佳答案

    我发现在gradle.config.kts中为任务设置环境变量是可行的:

    tasks {
    "run"(JavaExec::class) {
    environment("DATABASE_URL", "jdbc:postgresql://localhost:5432/test")
    environment("DATABASE_USER", "test")
    environment("DATABASE_PASSWORD", "password")
    }
    }

    (来源: Setting environment variables in build.gradle.kts)

    至于为什么我的最初方法只能在 Debug模式下工作,我不知道。
    至于问题2,我怀疑H2和Postgres可能存在一些语法差异,这会引起麻烦。现在在后台运行数据库容器可以正常工作。

    关于database - Ktor与Gradle从环境变量运行配置 “Could not resolve substitution to a value”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60578673/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com