是否存在使用常规程序参数无法复制的自定义JVM参数(what are custom jvm properties?)的用例?换句话说,它们是严格必要的还是仅仅是编程方便?
以下是不严格必要的JVM参数的用例:
java -jar -DmyCustomArg="my_value" MyFile.jar
MyFile中的某个地方是以下代码,取出属性:
String s = System.getProperty("myCustomArg");
此属性不是严格必需,因为我们可以按如下方式替换它:
显然,要完成以上所有操作将比添加&检索JVM属性。但是我的问题是:两者之间是否存在定性差异,即是否存在JVM参数的用例,其中无法通过常规程序参数实现相同的功能?或者,我们添加的自定义JVM参数只是一种方便,可以让我们避免像Map一样声明和使用我们自己的Properties对象吗?
答案 0 :(得分:0)
在您希望通过环境变量控制应用程序启动的情况下(例如,在使用docker时),对属性进行-D覆盖是非常好的。对于spring和其他框架,通常会有一个查找属性的正确配置值的查找顺序,通过JVM参数覆盖它是首先查看jar文件或文件系统中的属性文件后的最终回退。还有许多特定于java本身的系统属性,用于管理默认编码,代理,dns缓存等内容。
这里最重要的是最少惊喜的原则。这就是配置如何在Java中运行并且已经工作了大约20年。如果你愿意,你可以解决它,但为什么要这样做呢?换句话说,你对此有何反对意见?