目前,我在命令行上使用export JAVA_OPTS ...
,但似乎还有其他可能性,使用build.sbt
或外部属性文件。
我在这里,这里和这里发现了几个相关的github问题,但许多选项令人困惑。有什么推荐的方法吗?
设置JVM选项的方法主要取决于您的用例:
每次注入选项
如果您希望能够在每次运行服务时指定选项,则有两种机制是环境变量和命令行参数。您使用的主要是品味或方便的问题(但命令行参数将覆盖环境变量设置)。
-
环境变量
可以使用
JAVA_OPTS
环境变量注入值。这被指定为直接传递给java二进制文件的参数序列,每个参数用空格分隔。 -
命令行参数
您可以通过以以下两种格式添加命令行参数来注入值:
-
-Dkey=val
将Java环境属性传递到Java二进制文件中。 -J-X
传递任何标志
-X
到java二进制文件,去掉前面的-J
。
-
从文件中注入可修改的选项
如果您希望在文件系统上有一个可以在安装后修改的文件,那么您将希望使用sbt-native-packager
从.ini
文件中读取的能力来初始化Java选项的默认值。详细信息可在http://www.scala-sbt.org/sbt-native-packager/archetypes/cheatsheet.html#file-application-ini-or-etc-default
按照说明,并根据您正在使用的原型,您将得到一个位于/etc/default
、application.ini
或另一个自定义名称的文件,启动脚本将读取该文件以添加设置。
该文件的每一行都被视为额外的启动参数,因此仍然执行前面提到的相同规则;例如,-X
标志需要像-J-X
一样被写入。
注入选项&不需要修改的代码
您可以通过使用SBT设置bashScriptExtraDefines
,并按照http://www.scala-sbt.org/sbt-native-packager/archetypes/cheatsheet.html#extra-defines
就可能的情况而言,这是最灵活的选项(您可以编写任何有效的bash代码,这将添加到启动脚本中)。但它也不那么灵活,因为它之后是不可修改的;任何可选的计算都必须用bash脚本语言来描述。