1. 程式人生 > >關於最近一直糾纏我的c3p0-config.xml配置檔案找不到的問題終於解決了,\(^o^)/

關於最近一直糾纏我的c3p0-config.xml配置檔案找不到的問題終於解決了,\(^o^)/

從一開始看官方的文件中的說明,關於配置c3p0連線池,如果要使用xml來配置,需要將xml檔案放在classpath的路徑下。所以我就放好了

結果執行後,等待了很久,最後得到一堆紅色的讓人崩潰的error

心態瞬間崩了,喝了一口 雪碧纖維+ (這不是廣告-_-)冷靜一下,經過數分鐘的搜尋,網上的過來人告訴我可能是mysql的驅動版本不匹配,或者需要把這些jar包都扔到jre的lib下的ext資料夾裡面,於是我更換了最新的mysql-connector-java-6.0.6,結果依然不行。

這時我突然觀察到c3p0的日誌輸出中赫然寫著:jdbcUrl=null,怎麼回事,我明明配置了url啊,怎麼會這樣,明明官網說了只需要通過

DataSource ds = new ComboPooledDataSource();

這麼一行程式碼就會自動載入配置檔案的呢,於是我不信邪,下載了原始碼,經過除錯,找到了載入配置檔案的地方,

就是通過呼叫 類C3P0ConfigXmlUtils中的extractXmlConfigFromDefaultResource方法來獲取xml檔案,原理很簡單,依然是通過T.class.getClassLoader().getResourceAsStream("path")來獲取classpath路徑下的資原始檔的,我又發現這個類的xml檔案路徑居然是加了/的,按道理說使用classloader是無法識別的呢,於是又發現了原始碼中getResourceAsStream裡面早就封裝好了去掉頭部的/的方法。

一切都是那麼的合理,難道我是個傻子嗎???我不禁發出疑問,想到難道是作業系統影響,於是換了一臺windows10的系統試了一次,居然真的沒問題,我去。難道我找到了大佬的bug,不不不,經過自我鑑定與審視,這是不可能的。

突然間,我又赫然發現,日誌中的列印的c3p0版本居然還是0.9.1.2,我明明已經換成了0.9.5.2的jar包,為什麼,想到難道是IED有快取???

於是又動手在lib附近通過命令列建立一個touch TestDemo.java檔案,再一次嘗試,javac TestDemo.java,咦?居然不需要指定jar嗎,再一次又打印出了0.9.1.2的版本資訊,我屮艸芔茻

就在這時一個巨大的靈感打中了我,難道是jre中的classpath影響了我的發揮,此時程式載入的路徑就會是jre中的路徑了,我去把所有其他地方的jar包統統刪除後,再一次編譯,終於終於,成功了,終於找到了c3p0-config.xml所以說jar包的載入順序真的很重要啊,同志們,一點點的疏忽就這麼斷送了我的一天,希望以後這種問題不要再出現了,心裡舒了一口氣,感激!!!