码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java启动参数,idea参数设置,环境变量参数,jdk选项,程序main函数参数的配置和获取方式


    Idea 开发java 项目中的各种启动参数配置和获取方式汇总

        • java启动命令的整体结构
        • 如下4图涵盖了所有情况。本人亲自测试所得,欢迎提问
            • 1. 启动参数优先级: 高优先级的配置,会覆盖低优先级的配置。
            • 2. 按上图配置:启动测试,可见优先级最高的确实是 `program args`
            • 3. 启动参数配置的注意事项![在这里插入图片描述](https://img-blog.csdnimg.cn/a8237cdf53e9495a9607ff88b2f83bbd.jpeg)
            • 4. 不同参数的获取方式:
            • 5. idea 中配置 Active profiles : 会覆盖 `VM options` 配置 `-Dspring.profiles.active` 配置
        • 应用例子-配置jvm 给 tomcat 提速
        • 应用例子-sh脚本方式 启动Java

    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 server 从git拉取的优先级要高于 本地的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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    【符号链接】【bash】遍历目录下的每个子项目
    【残差网络 论文泛读】……DenseNet……(Densely Connected Convolutional Networks)
    SpringBoot:速成总结+实战——员工管理系统
    刷题DAY22 | LeetCode 235-二叉搜索树的最近公共祖先 701-二叉搜索树中的插入操作 450-删除二叉搜索树中的节点
    ubuntu20.4下配置esp开发环境
    PDE优化|逆问题中偏微分方程约束优化的惩罚方法(Matlab代码实现)
    18.1 Socket 原生套接字抓包
    【QEMU-tap-windows-Xshell】QEMU 创建 aarch64虚拟机(附有QEMU免费资源)
    UE4 Niagara 关卡3.1官方案例解析二
    如何进行找错和改错
  • 原文地址:https://blog.csdn.net/w1047667241/article/details/126590551
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号