java启动参数,idea参数设置,环境变量参数,jdk选项,程序main函数参数的配置和获取方式

2 篇文章 0 订阅
2 篇文章 0 订阅

java启动命令的整体结构

  • java [-D options] -jar 你打好的jar包名.jar [program args]
  • [-D options]jvm选项,一般以-D 开头,其他参数必须是jvm虚拟机能识别的参数 比如 -Xms等,参数之间用 空格 分开
  • [program args]main方法中的args ,也就是程序入口main 方法启动时加载 该参数
    如果参数是 --spring.profiles.active 等,则会被 springboot 程序识别和使用
    参数之间用 空格 分开
  • environment 是操作系统环境参数,在windows 上是 path中的JAVA_HOME 等环境变量配置,参数之间用 ; 分开
  • yml 配置jar包内部文件中指定的参数 ,远程config servergit拉取的优先级要高于 本地的yml 配置
    各种配置的优先级如何? 如何配置? 如何获取 这些参数? 参数何时生效 ?

如下4图涵盖了所有情况。本人亲自测试所得,欢迎提问

1. 启动参数优先级: 高优先级的配置,会覆盖低优先级的配置。

优先级,依次是 program args > VM options > Environment variables > 远程git 配置 > bootstrap.yml配置 > application.yml
Active profiles 方式,优先级略微高于 VM options
如果有多个地方配置了相同的参数,那么 高优先级的配置,会覆盖低优先级的配置。最终系统只认 高优先级的配置

在这里插入图片描述

2. 按上图配置:启动测试,可见优先级最高的确实是 program args

在这里插入图片描述

3. 启动参数配置的注意事项在这里插入图片描述
4. 不同参数的获取方式:
  1. program args : 直接在 main 方法中硬编码 获取 数组类型参数 args--spring.profiles.active 属于 该类型参数,理论上可以直接在 main 中获取
  2. VM options : System.getProperty("key")
  3. Environment variables:System.getenv("key")

在这里插入图片描述

5. idea 中配置 Active profiles : 会覆盖 VM options 配置 -Dspring.profiles.active 配置

在这里插入图片描述

应用例子-配置jvm 给 tomcat 提速

比如,为了使 springboot 内置的 tomcat 提速,就有以下3种方式

  • 可以这样直接去操作系统上,找到 jre 的配置文件,修改
    打开 $JAVA_PATH/jre/lib/security/java.security 这个文件,找到下面的内容:
    securerandom.source=file:/dev/random 替换成 securerandom.source=file:/dev/./urandom

  • 或者在idea中配置 jvm 的参数 -Djava.security.egd="file:/dev/./urandom"
    在这里插入图片描述

  • 也可以在启动的命令行中 指定 该 jvm 参数
    nohup java -Djava.security.egd=file:/dev/./urandom -jar server-1.0.0.jar --spring.profiles.active=test >/dev/null 2>&1 &

应用例子-sh脚本方式 启动Java

  • 该启动 sh脚本在项目的路径下 xxl-job-executor-sample-springboot.sh
    在这里插入图片描述
#!/bin/sh
# -server -Xms200m -Xmx200m -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=40m
# -server, 64位机器默认就是该参数,jdk7机器默认是-client 模式 https://segmentfault.com/a/1190000041114158
# GC 打印最佳实践 https://blog.nowcoder.net/n/baa65a5fe88044398cf65b6375a556c7?from=nowcoder_improve
# JVM参数详解 https://juejin.cn/post/7054567953181704200

JAVA_OPTS="-server -Djava.awt.headless=true \
-Dfile.encoding=UTF-8 \
-Duser.timezone=GMT+08 \
-Dmaven.test.skip=true \
-XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCDateStamps  -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime \
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=2m -Xloggc:./logs/gc-%t.log \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/dump.hprof -XX:ErrorFile=./logs/fatal-error.log"

PARAMS="--spring.profiles.active=prod"
jar_name=xxl-job-executor-sample-springboot

# sh 其他脚本后台启动-异步执行.sh &

echo '' >> ./logs/startup.log
echo $(date +"%Y-%m-%d %H:%M:%S") 启动中 ${jar_name} >> ./logs/startup.log
java ${JAVA_OPTS} -jar ./target/${jar_name}.jar ${PARAMS}
  • 14
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要查看Java应用程序启动参数,可以通过以下两种方式之一: 1. 在命令行中运行Java程序时使用“-version”或“-X”选项。例如,使用以下命令查看Java版本和默认启动参数: ``` java -version ``` 或者 ``` java -X ``` 2. 在Java应用程序中使用System.getProperty()方法获取启动参数。例如,使用以下代码获取Java虚拟机的启动参数: ``` String vmArgs = System.getProperty("java.vm.arguments"); System.out.println("VM arguments: " + vmArgs); ``` Java启动参数的解析可以参考以下几个方面: 1. 标准参数:这些参数是由Java虚拟机定义的,用于控制其行为。例如,“-version”和“-help”等。 2. 非标准参数:这些参数是由Java虚拟机供应商定义的,通常用于调试和性能分析。例如,“-XX:MaxHeapSize”和“-XX:+PrintGC”等。 3. 应用程序参数:这些参数是应用程序特定的,并由应用程序的开发者定义。例如,“-Dmyapp.config=file.properties”等。 在解析Java启动参数时,需要注意以下几个方面: 1. 参数顺序:Java启动参数的顺序通常很重要。例如,“-Dmyapp.config=file.properties -jar myapp.jar”和“-jar myapp.jar -Dmyapp.config=file.properties”可能会产生不同的结果。 2. 参数类型:Java启动参数通常有不同的类型,例如字符串、整数、布尔值等。在解析参数时,需要将参数转换为正确的类型。 3. 参数值:Java启动参数的值通常需要进行验证和处理。例如,“-Xmx512m”需要验证其值是否合法,并将其转换为字节数等。 总之,Java启动参数的解析是一个复杂的过程,需要仔细考虑各种情况和可能的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值