![](/img/trans.png)
[英]Can't connect to db in Play, connection string in 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.