李锋镝的博客

  • 首页
  • 时间轴
  • 插件
  • 评论区显眼包🔥
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
  • 留言
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 技术
  4. 正文

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

2025年6月23日 60点热度 0人点赞 0条评论

在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

相关文章

  • 属性名称闹的一场乌龙事件
  • SpringBoot常用注解
  • CompletableFuture使用详解
  • 金融级JVM深度调优实战的经验和技巧
  • SpringBoot 中内置的 49 个常用工具类
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA JVM SpringBoot 配置文件
最后更新:2025年6月23日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

位卑未敢忘忧国,事定犹须待阖棺。

那年今日(12月17日)

  • 1981年:德国足球运动员蒂姆·维泽出生
  • 1971年:印度和东巴基斯坦达成停火协议
  • 1909年:比利时国王利奥波德二世逝世
  • 1905年:狙击之王西蒙·海耶出生
  • 1902年:京师大学堂正式开学
  • 更多历史事件
最新 热点 随机
最新 热点 随机
AI原生数据库新标杆:seekdb深度解析,轻量架构与混合搜索的双重革命 做了一个WordPress文章热力图插件 Spring WebFlux底层原理深度剖析-从响应式流到事件循环的全链路拆解 Spring WebFlux深度解析:异步非阻塞架构与实战落地指南 规范驱动AI编程:用OpenSpec实现100%可控开发,从需求到代码的全流程闭环 WordPress网站换了个字体,差点儿把样式换崩了
玩博客的人是不是越来越少了?准备入手个亚太的ECS,友友们有什么建议吗?使用WireGuard在Ubuntu 24.04系统搭建VPNWordPress实现用户评论等级排行榜插件Gemini 3 Pro 深度测评:多模态AI编程的跨代际突破,从一句话到完整应用的全链路革命WordPress网站换了个字体,差点儿把样式换崩了
使用itext和freemarker来根据Html模板生成PDF文件,加水印、印章 项目中不用 redis 分布式锁,怎么防止用户重复提交? SpringBoot框架自动配置之spring.factories和AutoConfiguration.imports JAVA线程池简析(JDK1.6) IDEA版本2020.*全局MAVEN配置 Gemini 3 深度解析:从像素级复刻到 AGI 雏形,多模态 AI 如何重构开发与创作?
标签聚合
JVM WordPress SQL 日常 K8s 架构 SpringBoot AI编程 MySQL ElasticSearch 多线程 分布式 数据库 AI JAVA docker 设计模式 Spring IDEA Redis
友情链接
  • Blogs·CN
  • Honesty
  • 临窗旋墨
  • 哥斯拉
  • 彬红茶日记
  • 志文工作室
  • 搬砖日记
  • 旧时繁华
  • 林羽凡
  • 瓦匠个人小站
  • 皮皮社
  • 知向前端
  • 蜗牛工作室
  • 韩小韩博客
  • 风渡言

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3