李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于我
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 技术
  4. 正文

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

2025年6月23日 约 797 字3 分钟 94 0 0
本文最后更新于 2025年6月23日,距今已 443 天,其中的信息可能已经发生变化,请注意甄别。

在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 参数 > 配置文件 > 默认值。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/tech/4471

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

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

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

微信扫一扫分享

标签: JAVA JVM SpringBoot 配置文件
最后更新:2025年6月23日

岁月同一天 9 月 9 日

回望过去的今天,你在写什么

  • 5 年前 2021年9月9日
    百度的索引量数据现在有点儿太夸张了吧?

    咱的小破站怎么可能有这么多的索引量…… 是不是谁给咱洗数据了? :huaji3: 

相关文章
  • 从零搭建Spring Cloud Gateway网关(二)—— 打印请求响应日志2020年3月19日
  • SpringBoot集成Redis,从Redis中获取数据为null,但实际上Redis中是存在对应的数据的,是什么原因导致的呢?2021年1月19日
  • SpringBoot 中内置的 49 个常用工具类2025年5月26日
  • 以面试官视角万字解读线程池10大经典面试题2025年5月14日
  • Spring Boot 2.x使用PostgreSQL数据库2021年10月9日

李锋镝

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

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

文章评论

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

横眉冷对千夫指,俯首甘为孺子牛。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
推荐一个SVG 矢量小图标免费下载网站 关于使用AI的一些思考 book-to-skill:GitHub2.7万star开源项目,将书籍蒸馏为Agent可调用技能 最近厄尔尼诺现象越来越猛了 Kratos-plus v1.1.20版本更新说明 实用skills介绍之:Ponytail
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页写了一个订阅每日新闻的WP插件WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比
Dylan Custom Plugin 1.0.2版本更新说明 成语接龙 开发者必懂的 AI 向量入门:从数学基础到实战应用 8条经验轻松上手IDEA插件开发 如何通过命令查看Java应用内存中对象数量 规范驱动AI编程:用OpenSpec实现100%可控开发,从需求到代码的全流程闭环
最近评论
blank
李锋镝 发布于 3 小时前(09月09日) 是的,AI的执行力实在是太强了~ :79:
blank
obaby 发布于 5 小时前(09月09日) ai为了提高评分,会入侵服务器。哈哈哈 其实也正常。 目标导向就是如此。
blank
李锋镝 发布于 23 小时前(09月08日) 主要是看见这个配色想要,看见那个配色想要,干脆就都加里面了
blank
威言威语 发布于 24 小时前(09月08日) 配色是挺丰富~
blank
李锋镝 发布于 1 天前(09月08日) 让AI根据代码提交记录组织一下,给AI定一个规则,然后就轻松了
标签聚合
K8s 多线程 SQL 分布式 AI ElasticSearch Spring MySQL 架构 MQ 数据库 AI编程 JVM 日常 Claude SpringBoot JAVA Redis WordPress IDEA
友情链接
  • 韩情脉脉
  • 搬砖日记
  • 志文工作室
  • Mr.Sun的博客
  • Serendipity
  • 九仞之行
  • 老张博客
  • 若梦博客
  • 林羽凡
  • sssr7844的博客
  • 彬红茶日记
  • Honesty
  • 懋和道人
  • 韩小韩博客
  • 皮皮社
  • 蜗牛工作室
  • 瓦匠个人小站
  • 临窗旋墨
  • 知向前端
  • 哥斯拉

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号