今天,我在读JDBC的驱动程序管理器类的源代码时,看到了这样的代码。
system.getproperty (" JDBC.drivers "
名为getProperty ()的方法获取由指定密钥指示的系统属性,上面的代码获取名为jdbc.drivers的属性。 我写了测试输出,发现是空值。 因此,我打算检查系统属性中是否有名为jdbc.drivers的值。
我查看了java api中名为getProperty ()的方法,并找到了可以从getProperties () )获取的属性,如下图所示。
但是,居然没有我的jdbc.drivers,我决定以负责任的态度尝试输出所有的属性。 以下是使用System.getPropertys ()和System.getProperty () )使所有系统属性成为变量的方法:
@Test public void test ()//所有属性属性属性=system.get properties ); //与所有属性for (string key : properties.stringpropertynames () )//输出相对应的键和值system.out.println ) key '=' propeper
Java.runtime.name=Java(TM ) SE Runtime Environment
sun.boot.library.path=c :Java webJDK1.8.0_ 101 _ 64JRE 欢乐的音响
Java.VM.vendor=Oracle corporation
Java.vendor.URL=http://Java.Oracle.com /
path.separator=;
Java.VM.name=JavaHotspot(TM ) 64-bit服务器VM
file.encoding.pkg=sun.io user.script=user.country=cn
sun.Java.launcher=sun _ standards un.OS.patch.level=
Java.VM.specification.name=javavirtualmachinespecification
user.dir=e :7.projectcodesourceJDBC
Java.runtime.version=1.8.0_ 101-B13
Java.awt.graphics env=sun.awt.win32 graphics environment
Java.endorsed.dirs=c :Java webJDK1.8.0_ 101 _ 64JRElibendorsed
OS.arch=amd64 Java.io.tmpdir=c :usersadmin I至1appdatalocaltemp
line.separator=
Java.VM.specification.vendor=oraclecorporationuser.variant=
OS.name=windows 10s un.jnu.encoding=gbk
Java.library.path=c :Java webJDK1.8.0_ 101 _ 64 欢乐音响;
Java.specification.name=javaplatformapispecification
java.class.version=52.0
sun.management.com piler=hotspot 64-bit tiered
Compilers os.version=10.0
user.home=c :usersadministrator
user.timezone=
Java.awt.printer job=sun.awt.windows.wprinter job
file.encoding=UTF-8
java.specification.version=1.8
user.name=Administrator
Java.class.path=e :7.projectcodesourceJDBCtargettest-classes;
Java.VM.specification.version=1.8 sun.arch.data.model=64
Java.home=c :Java webJDK1.8.0_ 101 _ 64JRE
sun.Java.com mand=org.eclipse.JDT.internal.JUnit.runner.remote test runner
-版本3-port 57975-testloaderclassorg.eclipse.JDT.internal.JUnit4. runner.JUnit4test loader
- loaderpluginnameorg.eclipse.JDT.JUnit4. runtime-test com.Jim.JDBC.JDBC test 3360 test Java.specification.vendation
corporation user.language=zh awt.toolkit=sun.awt.windows.wtoolkit
Java.VM.info=混合模式
java.version=1.8.0_101
Java.ext.dirs=c :Java webJDK1.8.0_ 101 _ 64JRElibext; c :windowssunJavalibext
sun.boot.class.path=c :Java webJDK1.8.0_ 101 _ 64JRElibresources.jar; c :Java webJDK1.8.0_ 101 _ 64JRElibrt.jar; c :Java webJDK1.8.0_ 101 _ 64JRElibsunrs asign.jar;
java.vendor=Oracle Corporation
file.separator=
Java.vendor.URL.bug=http://bugreport.sun.com/bugreport /
sun.cpu.endian=little
sun.io.unicode.encoding=unicode little
sun.desktop=windows
sun.cpu.isalist=amd64
因为输出的东西也一团糟,所以加入了判断是否有jdbc.drivers这个属性的一句话。 代码如下。
@Test public void test ()//所有属性属性属性=system.get properties ); //为了查看系统的一些属性,添加了计数器int count=0所有属性for (string key : properties.string propertynames () ) system if (key.equals ignore case (JDBC.drivers ) ) system.out.println ) ) yes ); 返回; }system.out.println(count ); }结果,完全没有jdbc.drivers属性。 系统的属性有57个,比java api中列出的多,所以如果你的属性没有在java api中列出,请不要泄气,用上面的代码来判断。
之后,在看到java api后,在方法的开头添加了代码:
system.set property (' JDBC.drivers ',' aaa.bbb.ccc ' );
结果揭晓了。 也就是说,驱动程序管理器名为jdbc.drivers的系统属性不是原始系统所具有的属性,必须由用户自己设置和采用。 如果不设置,则为null。 这样看,一切都通了。