JDBC驱动的动态加载
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
???? 需求描述:通過導(dǎo)入jdbc的驅(qū)動包,配置數(shù)據(jù)庫的JDBC連接參數(shù)。來動態(tài)連接關(guān)系型數(shù)據(jù)庫。要求不用重啟JVM進(jìn)程。
? ? ?解決思路:首先我知道classloader是用來做類加載的。所以就看classloader的文檔。了解到可以使用URLClassLoader來動態(tài)的加載jar包。然后是Class.forName生成Driver對象注冊到DriverManager里面去。
????bug1:DriverManager死活注冊不了驅(qū)動
? ? bug2: ?報PermSize錯誤。
? ??
? ?bug1: 國內(nèi)的寫技術(shù)文章的有沒有公德心啊,沒測試的代碼你向網(wǎng)上貼毛啊。而且都是相互抄。最后終于在google 的一個夾角里面發(fā)現(xiàn)了一個文章,這是JDK的問題。解決方法需要一個driver的代理類。
? ? ? DriverManager.registerDriver(new DriverProxy(driver));
? ? ??DriverProxy是Driver的代理對象。實(shí)現(xiàn)Driver接口。
? ?bug2: PermSize ;才開始的解決思路是設(shè)置PermSize的大小 ?不起作用。后來判斷是DriverManager注冊驅(qū)動的時候,同一個驅(qū)動多次注冊造成PermSize的泄露,也就是驅(qū)動對象放在常量池里面。然后就加了一個判斷。這里要說下。DriverManager原本自帶了幾個驅(qū)動,就因?yàn)檫@幾個驅(qū)動,沒怎么仔細(xì)看,結(jié)果判斷錯誤浪費(fèi)一上午時間。我本機(jī)沒環(huán)境,包丟過去測試的。
? ??
教訓(xùn):少用百度,仔細(xì)看日志。
????
? ??
????????????
??????
轉(zhuǎn)載于:https://my.oschina.net/1987times/blog/199034
總結(jié)
以上是生活随笔為你收集整理的JDBC驱动的动态加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware手动启动USB Arbitr
- 下一篇: 使用自定义的按钮替换默认的input t