nov*_*von 5 scala sbt-native-packager amazon-elastic-beanstalk
我正在使用sbt native packager插件创建我的应用程序的zip文件,以便部署到弹性beanstalk.我想在我的beanstalk环境中设置环境变量,并将它们用于在运行时配置我的应用程序.我试图在我的Procfile中引用env变量,如下所示:
web: ./bin/bridgeservice -Dhttp.port=$PORT
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为$PORT没有由打包程序生成的启动脚本进行插值.
我也尝试在build.sbt中定义变量,如下所示:
import scala.util.Properties
javaOptions in Universal ++= Seq(
"-Dhttp.port=" + Properties.envOrElse("PORT", "9004"),
)
Run Code Online (Sandbox Code Playgroud)
这也不起作用,因为打包程序PORT在构建可分发zip时需要env变量,并且在application.ini文件中硬编码默认值9004.
是否可以在应用程序启动时根据环境变量动态传递java选项?
小智 1
不确定这是否有帮助,但我在构建多模块项目的 docker 映像时遇到了类似的问题。
我以此结束:
def sysPropOrDefault(propName: String, default: String): String = Option(System.getProperty(propName)).getOrElse(default)
val somePort = sysPropOrDefault("port", "9004")
Run Code Online (Sandbox Code Playgroud)
并在项目定义中:
lazy val someProject = project("some-project")
.enablePlugins(JavaServerAppPackaging)
.settings(
javaOptions in Universal ++= Seq(
s"-Dhttp.port=$somePort"
)
)
Run Code Online (Sandbox Code Playgroud)
在我的例子中,将 javaOptions 添加到项目设置级别至关重要。选项前面的 s 不是拼写错误。
从终端运行命令时,我调用了:
sbt clean update -Dport=9005 docker:publishLocal
Run Code Online (Sandbox Code Playgroud)