JDBC驱动的动态加载

     需求描述:通过导入jdbc的驱动包,配置数据库的JDBC连接参数。来动态连接关系型数据库。要求不用重启JVM进程。

     解决思路:首先我知道classloader是用来做类加载的。所以就看classloader的文档。了解到可以使用URLClassLoader来动态的加载jar包。然后是Class.forName生成Driver对象注册到DriverManager里面去。

    bug1:DriverManager死活注册不了驱动

    bug2:  报PermSize错误。

    

   bug1: 国内的写技术文章的有没有公德心啊,没测试的代码你向网上贴毛啊。而且都是相互抄。最后终于在google 的一个夹角里面发现了一个文章,这是JDK的问题。解决方法需要一个driver的代理类。

      DriverManager.registerDriver(new DriverProxy(driver));

      DriverProxy是Driver的代理对象。实现Driver接口。


   bug2: PermSize ;才开始的解决思路是设置PermSize的大小  不起作用。后来判断是DriverManager注册驱动的时候,同一个驱动多次注册造成PermSize的泄露,也就是驱动对象放在常量池里面。然后就加了一个判断。这里要说下。DriverManager原本自带了几个驱动,就因为这几个驱动,没怎么仔细看,结果判断错误浪费一上午时间。我本机没环境,包丢过去测试的。

    

教训:少用百度,仔细看日志。

    

    


            

      

你可能感兴趣的:(JDBC驱动的动态加载)