Typesafe配置环境变量

tys*_*njh 8 configuration akka playframework typesafe

尝试${HOSTNAME}在配置文件中使用不起作用!根据文档,配置文件应解析文档中提到的环境变量:

如果它们在配置本身中没有解析,则替换回退到环境变量,因此$ {HOME}将按预期工作.此外,大多数配置都合并了系统属性,因此您可以使用$ {user.home}.

有没有办法让主机名进入配置文件?

复制
添加host.name=${HOSTNAME}到application.conf文件,然后尝试从任何地方访问它.例如,尝试添加

Logger.info(s"Hostname is ${current.configuration.getString("host.name").getOrElse("NOT-FOUND")}")
Run Code Online (Sandbox Code Playgroud)

到了Global.scala.

环境
这是在一个地方RHEL6环境中运行echo $HOSTNAME产生precise32这样的环境变量存在,这是不是程序hostname.

tys*_*njh 8

解决方案似乎是通过系统属性传递主机名为-Dhost.name=$HOSTNAME或-Dhost.name=$(hostname).我想在Windows中它会是其他东西,但这适用于*NIX环境.

除非有人能提出更清洁的东西,否则这将是公认的答案.

  • 这里发生的是HOSTNAME是一个shell变量,但不是一个环境变量.请参阅http://stackoverflow.com/questions/3341372/differnce-between-the-shell-and-environment-variable-in-bash另一种说法是,HOSTNAME不是"导出"的,它只是bash进程的内部.在低级别的术语中,当bash分叉子进程时,它不会将未导出的变量传递给子环境.实际意义是你可以通过在启动JVM之前执行`export HOSTNAME`来解决这个问题. (8认同)

Jam*_*ard 7

这可能不起作用,因为$HOSTNAME似乎实际上不是一个环境变量:

jamesw@T430s:~$ echo $HOSTNAME
T430s
jamesw@T430s:~$ export|grep HOSTNAME
jamesw@T430s:~$
Run Code Online (Sandbox Code Playgroud)

所以它必须是一些其他特殊的bash事物.