总结一下:今天在写尚硅谷书城的时候遇到的坑,如下图,说出现空指针异常,但是我在单元测试的时候都能查询出来数据
其实报错日志说的很清楚,就是系统在读取jdbc.properties的时候没读取到,但我根本没有意识到这个问题,因为在学习jdbc的时候我一直都是用下面这种 方式读取properties文件的:
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
并且也没出现过类似的问题,就一直用debug调式,发现获得的连接一直为空:
所以就报NullPointerException异常
后面改成这样加载配置文件就可以了,:
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
打印两个得到的类加载器发现在单元测试的时候是这样的:
ClassLoader.getSystemClassLoader():sun.misc.Launcher$AppClassLoader@18b4aac2
JdbcUtils.class.getClassLoader():sun.misc.Launcher$AppClassLoader@18b4aac2
但是在访问浏览器后打印的类加载器却是这样的
ClassLoader.getSystemClassLoader():sun.misc.Launcher$AppClassLoader@764c12b6
JdbcUtils.class.getClassLoader():WebappClassLoader
context: book
delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@5e91993f
所以最终是类加载器的原因,但是为什么两次的类加载器不一样呢?我也不知道。。。。