Play framework 2.5.1 环境变量和属性替换

Play framework 2.5.1 Environment variables and property substitution

我想在 Docker 中设置一个 Play 应用程序,并想使用属性和环境变量传入数据库连接参数。

下面的方法是否有效?

play.modules.enabled += "play.modules.reactivemongo.ReactiveMongoModule"

mongo-async-driver {
  akka {
    loglevel = WARNING
  }
}
mongodb {
  host = ${?MONGO_HOST}
  port = ${?MONGO_PORT}
  user = ${?MONGO_USER}
  pass = ${?MONGO_PASS}
  db = ${?MONGO_DB}
  uri = "mongodb://"${mongodb.user}":"${mongodb.pass}"@"${mongodb.host}":"${mongodb.port}"/"${mongodb.db}"?authMode=scram-sha1&rm.tcpNoDelay=true&rm.nbChannelsPerNode=10"
}

admindb {
  host = ${?MONGO_HOST}
  port = ${?MONGO_PORT}
  user = ${?MONGO_USER}
  pass = ${?MONGO_PASS}
  db = ${?MONGO_DB}
  uri = "mongodb://"${admindb.user}":"${admindb.pass}"@"${admindb.host}":"${admindb.port}"/"${admindb.db}"?authMode=scram-sha1&rm.tcpNoDelay=true&rm.nbChannelsPerNode=10"
}

我想传入以下环境变量:

  1. MONGO_HOST
  2. MONGO_PORT
  3. MONGO_USER
  4. MONGO_PASS
  5. MONGO_DB

并希望 HOCON 属性 替换来构造最终的 uri,在代码中我将以 mongodb.uri 和 admindb.uri 的形式访问它以获得最终值。

发现上述方法是将环境变量传递到 Play Framework 应用程序的最佳方法。

如果是docker容器,环境变量可以传入 -e KEY=VALUE 命令行参数。

这可用于为应用程序提供更动态的特性,可能用于多租户或安全分配数据库凭据等。