【问题标题】:How to use Environment Variables and application.conf files in Scala?如何在 Scala 中使用环境变量和 application.conf 文件?
【发布时间】:2021-04-20 22:02:00
【问题描述】:

我不确定如何将环境变量从我的 dev.env 和 prod.env 获取到我的 application.conf(或从 conf 文件中引用它们)。

我想将我的应用程序部署到 heroku 并将其连接到 heroku 的数据库。将来,我想在 docker 容器中部署到 AWS。

能否请一些人解释一下环境变量在 Scala 中是如何工作的,并解释如何从 application.conf 中引用环境变量。

我已经有一个 configLoader。

下面是我的文件结构的图片,我还复制了下面的代码:

application.conf 文件如下:

    akka {
      loggers = ["akka.event.slf4j.Slf4jLogger"]
      loglevel = DEBUG
    }

    server-config {
      host = "0.0.0.0"
      port = 8080
      base-url = ${?BASE_URL}
    }

    db-config {
      url = {?JDBC_DATABASE_URL}
      username = "su"
      password = "password"
      pool-size = 10
      driver="org.h2.Driver"
    }

下面的dev.env:

ENV=dev

BASE_URL=http://localhost:8080

JDBC_DATABASE_URL=jdbc:postgresql://localhost:5400/bookswapdb

prd.env 下面:

ENV=${_ENVIRONMENT}

BASE_URL=https://git.heroku.com/appone2021.git

JDBC_DATABASE_URL=${URL_WITH_CREDS_REDACTED}

【问题讨论】:

标签: postgresql scala heroku environment-variables typesafe-config


【解决方案1】:

假设您正在使用ConfigFactory.load(或让 Akka 为您加载配置),环境变量将“正常工作”,假设 JVM 进程实际运行时设置了环境变量。

要获得例如db-config.url 的值,您应该能够做到

val config = ConfigFactory.load()  // or if in an actor, context.system.config
val dbUrl = config.getString("db-config.url")

在 Heroku 上,您只需 use config vars。对于 AWS 部署,如何将环境变量注入容器的细节取决于您运行容器的方式。请注意,在 IntelliJ 中设置环境变量可能很困难或不可能(因为如果 IntelliJ 在其自己的 JVM 中运行应用程序,它只会在 IntelliJ 启动时设置环境变量)。

【讨论】:

    【解决方案2】:
    db={
      default.driver = "org.postgresql.Driver"
      default.url="vendor://username:password@host:port/db"
      db.url=${DATABASE_URL}
      db.profile="jdbc.PostgresProfile"
    }
    

    如果您使用的是内置数据库连接池之一,Play 会自动为您将其转换为 JDBC URL。 但其他数据库库和框架,例如 Slick 或 Hibernate,可能本身不支持这种格式。 如果是这种情况,您可以尝试在配置中使用动态 JDBC_DATABASE_URL 代替 DATABASE_URL,如下所示:

    db.default.url=${?JDBC_DATABASE_URL}
    

    从 application.conf 文件中获取值:

    import com.typesafe.config.Config 
    val str1=config.getString("your_string")
    

    参考https://www.playframework.com/documentation/2.8.x/ProductionHeroku

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2017-09-14
      • 2021-06-21
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多