簡體   English   中英

Scala中環境變量和application.conf文件如何使用?

[英]How to use Environment Variables and application.conf files in Scala?

我不確定如何從我的 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}

假設您正在使用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 上,您只需使用 config vars 對於 AWS 部署,如何將環境變量注入容器的細節將取決於您運行容器的方式。 請注意,在 IntelliJ 中設置環境變量可能很困難或不可能(因為如果 IntelliJ 在其自己的 JVM 中運行應用程序,它只會在 IntelliJ 啟動時設置環境變量)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM