URLConnection中的useCache选项
当使用自定义的classLoader加载一个jar包,同时ar包中依赖的第三方包(如mybatis)需要读取jar包中的配置文件时,通常mybatis的实现通过classloader的getResourceAsStream的方法读取配置文件,具体实现时会依赖URLConnection的类。这个类由bootstrap加载,该类会对首次生产的connection对象进行缓存。如果通过自定义的classLoader再一次加载原始jar包修改后的jar包时,jvm可能会使用缓存的上次生产的connection对象,最终会报错找不到mybatis的配置文件。具体表现是URLConnection connection = classloader.getResource("configFile").openConnection()运行正确,connection.getInputStream时报错。解决办法是URLConnection connection = classloader.getResource("configFile").openConnection();connection.useCache(false);connection.getInputStream,再重新生成connection对象。