燮,
我正在尝试在Play2.4 Scala中为我的项目设置环境变量。 我在Intellij中的运行配置中设置了变量。
什么令人讨厌Scala似乎没有看到那些。
我一直收到没有为使用env变量的键指定的配置错误。
当我在控制台中启动应用程序时:
"C:\Program Files\Java\jdk1.8.0_25\bin\java" -Dfile.encoding=UTF8 -DMAIL_PORT=587 -DDB_URI=mongodb://uri -Djline.terminal=none -Dsbt.log.noformat=true -Dsbt.global.base=C:\Users\Haito\AppData\Local\Temp\sbt-global-plugin7stub -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -classpath C:\Users\Haito\.IntelliJIdea14\config\plugins\Scala\launcher\sbt-launch.jar xsbt.boot.Boot "project root" ~run
配置文件:
mongodb.uri = ${?DB_URI}
play.mailer {
host=${?MAIL_HOST}
port=${?MAIL_PORT}
ssl=false
tls=true
user=${?MAIL_USERNAME}
password=${?MAIL_PASSWD}
debug=false
mock=false
}
我一直在那些:
Missing configuration key 'mongodb.db'!
当然我的问题不是我的mongo司机。我的问题是配置没有提供环境变量。梅勒也使用环境变量进行配置。当我粘贴除${?DB_URI}
之外的实际URI。
构建
resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"
resolvers += "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"
libraryDependencies ++= Seq(
"org.reactivemongo" %% "play2-reactivemongo" % "0.11.2.play24"
)
libraryDependencies ++= Seq(
"com.typesafe.play" %% "play-mailer" % "3.0.1"
)
答案 0 :(得分:3)
这是bug in IntelliJ。在Play运行配置中设置“环境变量”字段会设置系统属性,而不是环境变量。
如果您在.bash_profile
之类的地方手动配置环境变量,那么您当然可以在application.conf中使用它们,如:
db.default.url = ${?DB_URL}
答案 1 :(得分:0)
当我在控制台中启动应用程序时:
"C:\Program Files\Java\jdk1.8.0_25\bin\java" -Dfile.encoding=UTF8 -DMAIL_PORT=587 -DDB_URI=mongodb://uri -Djline.terminal=none -Dsbt.log.noformat=true -Dsbt.global.base=C:\Users\Haito\AppData\Local\Temp\sbt-global-plugin7stub -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -classpath C:\Users\Haito\.IntelliJIdea14\config\plugins\Scala\launcher\sbt-launch.jar xsbt.boot.Boot "project root" ~run
-D
没有设置环境变量,它会设置JVM system properties。您也应该能够从运行配置中设置环境变量,但是对话框的另一部分。
另外,Play的文档并没有说它完全关注环境变量:
As well as the application.conf file, configuration comes from a couple of other places.
默认设置从类路径中找到的任何reference.conf文件加载。大多数Play JAR都包含一个带有默认设置的reference.conf文件。 application.conf中的设置将覆盖reference.conf文件中的设置。
也可以使用系统属性设置配置。系统属性覆盖application.conf设置。
即。通过-Dmongodb.uri=...
应该有效。
后来确实说
对于配置树中未找到的替换,实现可能尝试通过查看系统环境变量或其他外部配置源来解决它们。 (有关环境变量的更多细节,请参阅后面的部分。)
但这只是HOCON README的引用。
您需要查看加载配置的代码,以检查它是否使用了包含环境变量的方法之一。
答案 2 :(得分:0)
如果您的mongodb网址包含mongodb://xxxxxxxxxx?key=value
等参数,那么intellij将默默删除该env变量。