如何在sbt程序集jar中访问环境变量?

时间:2017-09-30 01:46:43

标签: java jar sbt environment-variables sbt-assembly

我有一个sbt项目,用于在指定端口上旋转服务器。以下是build.sbt的相关摘录:

port in container.Configuration := sys.env.getOrElse("MY_VAR_SEARCH_PORT", 8080).toString.toInt

当我从sbt运行项目时,$MY_VAR_SEARCH_PORT被拾起,一切都很好。

但是,对于prod,我使用sbt-assembly并在docker容器中运行jar,因此launch命令如下所示:

docker run -it -p 80:80 -e MY_VAR_SEARCH_PORT=80 mydockerhubrepo/myimageid /docker-entrypoint.sh java -Djava.io.tmpdir=/tmp/jetty -Drun.mode=production -Denv=prod -jar /usr/local/jetty/start.jar

我可以看到var被传递给容器,但它没有被jar拾取,因为它在默认端口上旋转了一个服务器。

使sbt-assembly jar访问环境变量的好方法是什么?或者我可以将此var作为java参数传递 - 然后,如何从build.sbt文件中访问它?

1 个答案:

答案 0 :(得分:1)

将Java启动命令移动到将无问题地访问env vars的shell脚本:

  1. 在您的项目中,添加api_startup.sh:
    #!/bin/sh echo "API startup script running... with ENV=$ENV" java -Djava.io.tmpdir=/tmp/jetty -Drun.mode=production -Denv=$ENV -Drun.port=$MY_VAR_SEARCH_PORT -jar /usr/local/jetty/start.jar
  2. 在Dockerfile中,添加以下行:
    ADD api_startup.sh /api_startup.sh RUN chown jetty:jetty /api_startup.sh CMD ["/api_startup.sh"]
  3. 现在您可以像这样运行它:
    docker run -it -p 80:80 -e MY_VAR_SEARCH_PORT=80 mydockerhubrepo/myimageid