zoukankan      html  css  js  c++  java
  • System.getProperty()方法获取系统变量

    来自我的CSDN博客
      今天在阅读JDBC的DriverManager类源码时,看到了这么一句代码:

    System.getProperty("jdbc.drivers");

      getProperty()这个方法是获取指定键指示的系统属性的,也就是说上面的代码获取的是jdbc.drivers这个属性。我写了个测试测试输出,发现是null值。于是就打算看看系统属性中有没有jdbc.drivers这个值。
      查看了一下java api中的getProperty()这个方法,后通过getProperties()找到了能获取到的属性,如下图所示:

    getProperties()能获取到的属性

      但是居然没有我的jdbc.drivers,于是本着负责的态度,我决定将所有的属性都输出看一看。以下是通过System.getPropertys()和System.getProperty()变量所有系统属性的方法。

        @Test
        public void test(){
    	    //获取所有的属性
            Properties properties = System.getProperties();
            //遍历所有的属性
            for (String key : properties.stringPropertyNames()) {
                //输出对应的键和值
                System.out.println(key + "=" + properties.getProperty(key));
            }
    
        }
    

      对应的结果如下:

    java.runtime.name=Java(TM) SE Runtime Environment
    sun.boot.library.path=C:javawebjdk1.8.0_101_64jrein
    java.vm.vendor=Oracle Corporation
    java.vendor.url=http://java.oracle.com/
    path.separator=;
    java.vm.name=Java HotSpot(TM) 64-Bit Server VM
    file.encoding.pkg=sun.io user.script= user.country=CN
    sun.java.launcher=SUN_STANDARD sun.os.patch.level=
    java.vm.specification.name=Java Virtual Machine Specification
    user.dir=E:7.ProjectCodeSourcejdbc
    java.runtime.version=1.8.0_101-b13
    java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
    java.endorsed.dirs=C:javawebjdk1.8.0_101_64jrelibendorsed
    os.arch=amd64 java.io.tmpdir=C:UsersADMINI~1AppDataLocalTemp
    line.separator=

    java.vm.specification.vendor=Oracle Corporation user.variant=
    os.name=Windows 10 sun.jnu.encoding=GBK
    java.library.path=C:javawebjdk1.8.0_101_64in;
    java.specification.name=Java Platform API Specification
    java.class.version=52.0
    sun.management.compiler=HotSpot 64-Bit Tiered
    Compilers os.version=10.0
    user.home=C:UsersAdministrator
    user.timezone=
    java.awt.printerjob=sun.awt.windows.WPrinterJob
    file.encoding=UTF-8
    java.specification.version=1.8
    user.name=Administrator
    java.class.path=E:7.ProjectCodeSourcejdbc arget est-classes;
    java.vm.specification.version=1.8 sun.arch.data.model=64
    java.home=C:javawebjdk1.8.0_101_64jre
    sun.java.command=org.eclipse.jdt.internal.junit.runner.RemoteTestRunner
    -version 3 -port 57975 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader
    -loaderpluginname org.eclipse.jdt.junit4.runtime -test com.jim.jdbc.JDBCTest:test java.specification.vendor=Oracle
    Corporation user.language=zh awt.toolkit=sun.awt.windows.WToolkit
    java.vm.info=mixed mode
    java.version=1.8.0_101
    java.ext.dirs=C:javawebjdk1.8.0_101_64jrelibext;C:WindowsSunJavalibext
    sun.boot.class.path=C:javawebjdk1.8.0_101_64jrelib esources.jar;C:javawebjdk1.8.0_101_64jrelib t.jar;C:javawebjdk1.8.0_101_64jrelibsunrsasign.jar;
    java.vendor=Oracle Corporation
    file.separator=
    java.vendor.url.bug=http://bugreport.sun.com/bugreport/
    sun.cpu.endian=little
    sun.io.unicode.encoding=UnicodeLittle
    sun.desktop=windows
    sun.cpu.isalist=amd64

      输出的东西也太乱了,我就加了一句判断看有没有jdbc.drivers这个属性。代码如下:

    @Test
        public void test(){
            //获取所有的属性
            Properties properties = System.getProperties();
            //为了看看系统的属性有几个,加了一个计数器
            int count = 0;
            //遍历所有的属性
            for (String key : properties.stringPropertyNames()) {
                System.out.println(key + "=" + properties.getProperty(key));
                count++;
                if (key.equalsIgnoreCase("jdbc.drivers")){
                    System.out.println("YES");
                    return ;
                }
    
            }
            System.out.println(count);
        }
    

      结果是根本没有jdbc.drivers这个属性,系统的属性有57个,比java api中列出来的要多,所以如果你的属性不再java api的所列出的列表中,不要灰心,可以使用上面的代码判断一下。

      我后来看了java api之后,加了一句代码在方法最前面:

       System.setProperty("jdbc.drivers","aaa.bbb.ccc");
    

      结果就显示有了。也就是说,DriverManager中的jdbc.drivers这个系统属性不是本来系统自带的,需要用户自己设定采用。如果不设定,则为null。这样看来,一切都说通了。
    来自我的CSDN博客

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    js笔记4
    js笔记3
    js笔记2
    js笔记1
    前端笔记13
    (7)第3章的开始
    (6)第2章的尾巴~
    (5)自定义数据结构再探
    我的学习方法(6)
    (4)自定义数据结构初探
  • 原文地址:https://www.cnblogs.com/homejim/p/8088124.html
Copyright © 2011-2022 走看看