李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 技术
  4. 正文

JVM参数中的-D是什么意思

2025年6月23日 209 0 0
本文最后更新于 2025年6月23日,距今已 502 天,其中的信息可能已经发生变化,请注意甄别。

在JVM(Java虚拟机)参数中,-D 是一个非常重要的选项,用于在启动Java程序时设置系统属性(System Properties)。这些属性可以在程序中通过 System.getProperty() 方法访问,主要用于动态配置应用行为、传递环境变量或自定义参数。

一、核心作用

-D 的作用是在JVM启动时设置系统属性,格式为:

-D<propertyName>=<propertyValue>

例如:

java -Dserver.port=8080 -Dapp.env=prod MainClass

在Java代码中,可以通过以下方式获取这些属性:

String port = System.getProperty("server.port");  // 返回 "8080"
String env = System.getProperty("app.env");      // 返回 "prod"

二、常见应用场景

1. 配置应用参数

  • 数据库连接信息:
    java -Ddb.url=jdbc:mysql://localhost:3306/mydb \
       -Ddb.username=root \
       -Ddb.password=secret \
       MainClass

    在代码中:

    String url = System.getProperty("db.url");

2. 控制日志行为

  • 设置日志级别:
    java -Dlog.level=DEBUG MainClass

    在日志配置中引用:

3. 指定文件编码

  • 解决中文乱码问题:
    java -Dfile.encoding=UTF-8 MainClass

4. 自定义系统行为

  • 启用/禁用功能:
    java -Dfeature.flag=true MainClass

5. 容器化环境配置

  • 从环境变量传递到Java程序:
    java -Dserver.port=$PORT MainClass

三、与其他JVM参数的区别

参数类型 示例 作用范围 访问方式
-D -Dname=value 设置系统属性,应用程序可读取 System.getProperty("name")
-X -Xmx1024m 设置非标准JVM选项(如堆内存大小) JVM内部使用
-XX -XX:+UseG1GC 设置高级JVM选项(如垃圾回收器) JVM内部使用
-classpath -cp lib/* 指定类路径 JVM加载类时使用

四、使用注意事项

  1. 属性名的命名规则

    • 建议使用点分格式(如 app.name)以提高可读性。
    • 避免与JVM内置属性冲突(如 java.home、os.name)。
  2. 空格处理

    • 如果值包含空格,需要用引号包裹:
      java -Ddescription="Hello World" MainClass
  3. 优先级

    • 命令行 -D 参数会覆盖系统环境变量和代码中 System.setProperty() 的默认值。
  4. 安全性

    • 敏感信息(如密码)建议通过更安全的方式传递(如环境变量或配置文件),避免在命令行中明文显示。

五、示例代码

以下Java程序演示如何读取 -D 设置的属性:

public class SystemPropertyDemo {
    public static void main(String[] args) {
        // 获取系统属性
        String appName = System.getProperty("app.name", "DefaultApp");
        String env = System.getProperty("app.env", "dev");
        boolean debug = Boolean.parseBoolean(System.getProperty("debug", "false"));

        // 输出属性值
        System.out.println("应用名称: " + appName);
        System.out.println("运行环境: " + env);
        System.out.println("调试模式: " + debug);

        // 获取所有系统属性
        System.getProperties().forEach((k, v) -> {
            System.out.println(k + " = " + v);
        });
    }
}

运行命令:

java -Dapp.name=MyApp -Dapp.env=prod -Ddebug=true SystemPropertyDemo

六、常见内置系统属性

属性名 说明 示例值
java.version Java版本号 17.0.2
java.home JRE安装目录 /usr/lib/jvm/java-17-openjdk
os.name 操作系统名称 Linux 或 Windows 10
user.dir 当前工作目录 /home/user/projects
user.home 用户主目录 /home/user
file.encoding 文件编码 UTF-8

通过 -D 参数,你可以在不修改代码的情况下动态调整应用行为,这在不同环境(开发、测试、生产)部署时尤为有用。

注意:SpringBoot 的优先级规则是:命令行参数 > JVM 参数 > 配置文件 > 默认值。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

JVM参数中的-D是什么意思

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA JVM SpringBoot 配置文件
最后更新:2025年6月23日
相关文章
  • Java之五种遍历Map集合的方式2021年2月19日
  • UUID太长怎么办?快来试试NanoId2022年3月31日
  • JVM详细参数说明2020年7月27日
  • OOM后,JVM一定会退出吗?为什么?2024年4月15日
  • @Valid 和 @Validated 的区别2025年5月23日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

惟坚韧者始能遂其志。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
给主题增加了游客中心功能心气没了,干什么都不得劲我觉得是时候公布我的导航网站了给服务器加了WAF游本昌去世关于主题加载速度优化的一点儿小演进
Elasticsearch的分布式文档存储原理 Redis中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发 使用Spring MVC的websocket配置时 Tomcat启动报错 C++之父重磅发声:AI编程正在毁掉一代程序员 1931→2021!
最近评论
fairy 发布于 1 天前(11月06日) 机器人快来我这里吧!
李锋镝 发布于 1 天前(11月06日) 都是机器人,防不住
李锋镝 发布于 1 天前(11月06日) 是的,太烦了
李锋镝 发布于 1 天前(11月06日) 可以同一台服务器
fairy 发布于 1 天前(11月06日) 这流量,好厉害啊。我一年都没那么多
标签聚合
Theme WordPress JAVA 数据库 MySQL SQL AI 多线程 JVM Claude 日常 架构 Spring IDEA ElasticSearch K8s Redis SpringBoot AI编程 分布式
友情链接
  • 瓦匠个人小站
  • 韩小韩博客
  • 老张博客
  • 知向前端
  • 哥斯拉
  • lijie blog
  • 九仞之行
  • 韩情脉脉
  • Mr.Sun的博客
  • 刘永博客
  • 搬砖日记
  • 林羽凡
  • 彬红茶日记
  • sssr7844的博客
  • Serendipity
  • 懋和道人
  • 皮皮社
  • Honesty
  • 志文工作室

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号