Java动态参数随记

来自三线的随记

cp from https://blog.csdn.net/weixin_44641136/article/details/104481085


java 本身提供了相应的环境变量 JDK_JAVA_OPTIONSJAVA_TOOL_OPTIONS :可以用于注入参数到java启动命令中,对container运行很有帮助

常见的JAVA_OPTS 是个人为定义的常用变量

JDK_JAVA_OPTIONS 是在 Java 9 引入的,java 程序启动时不需要在命令行指定就会自动读取的环境变量,它略微有些限制,主要是为了防止滥用不允许使用可能改变主类或者让主类不执行的参数,通常需要指定的内存、GC 等参数都可以使用。遇到不允许使用的参数时 java 会直接报错并退出,所以只要程序顺利启动就不用担心使用了不允许使用的参数。在这里指定的参数无法覆盖命令行的相同参数,需要锁定的配置可以直接指定在 ENTRYPOINT中。

JAVA_TOOL_OPTIONS 是存在很久的环境变量,这个环境变量同样不需要在命令行显式指定。它名字中的 TOOL 提示了除了 java 命令之外其它 java 工具命令例如 javac 之类的也会去读取这个变量的值。在这里指定的参数既不能覆盖命令行的相同参数,也不能覆盖 JDK_JAVA_OPTIONS 中的相同参数,优先级最低。

除此之外,还有各家专用的一些环境变量,比如 Oracle 家的 _JAVA_OPTIONS、IBM 家的 IBM_JAVA_OPTIONS,它们通常提供了覆盖命令行上相同参数的能力,但是环境变量名却不可移植,在 Xxx as Code 的时代并不是个好选择。


使用了如上变量以后,java在运行的时候会提示

Picked up JAVA_TOOL_OPTIONS: ***********