加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用sbt native packager进行基于环境变量的运行时配置

发布时间:2020-12-16 18:31:55 所属栏目:安全 来源:网络整理
导读:我正在使用sbt native packager插件创建我的应用程序的zip文件,以便部署到弹性beanstalk.我想在我的beanstalk环境中设置环境变量,并将它们用于在运行时配置我的应用程序.我试图在我的Procfile中引用env变量,如下所示: web: ./bin/bridgeservice -Dhttp.port
我正在使用sbt native packager插件创建我的应用程序的zip文件,以便部署到弹性beanstalk.我想在我的beanstalk环境中设置环境变量,并将它们用于在运行时配置我的应用程序.我试图在我的Procfile中引用env变量,如下所示:

web: ./bin/bridgeservice -Dhttp.port=$PORT

这不起作用,因为$PORT不会被打包程序生成的启动脚本插值.

我也尝试在build.sbt中定义变量,如下所示:

import scala.util.Properties

javaOptions in Universal ++= Seq(
  "-Dhttp.port=" + Properties.envOrElse("PORT","9004"),)

这也不起作用,因为打包程序在构建可分发zip时需要PORT env变量,并且在application.ini文件中硬编码默认值9004.

是否可以在应用程序启动时根据环境变量动态传递java选项?

解决方法

Universal中javaOptions中的设置被编译到conf / application.ini文件中,但相应于 sbt-native-packager docs application.ini目前不支持变量替换:

The file will be installed to ${app_home}/conf/application.ini and
read from there by the startscript. You can use # for comments and new
lines as you like. This file currently doesn’t has any variable
substitution. We recommend using the build.sbt if you need any
information from your build.

因此,基于env var的运行时设置可以通过以下几种方式实现:

解决方案#1.为生成的启动脚本添加额外的定义

在build.sbt中:

bashScriptExtraDefines += """addJava "-Dhttp.port=${PORT:-9004}""""

查看Application and runtime configuration文档了解更多信息.

解决方案#2:在目标服务器中设置JAVA_OPTS env var

只需在目标服务器上设置JAVA_OPTS环境变量,并使其可用于启动脚本.对于像AWS ElasticBeanstalk这样的环境,这可以是最简单的解决方案,其中可以在应用程序的环境配置页面上设置env vars.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读