動態修改JDBC數據源配置


因項目需要能動態修改數據源的配置,及修改后不用重啟整個應用。使用的數據源是apache的BasicDataSource,網上千篇一律的是如下實現:

BasicDataSource bds=getDataSource();
  try{
   bds.close();
   
  }
  catch(Exception e){
   e.printStackTrace();
  }
  bds.setUsername("sa");
  bds.setPassword("admin");

 

還說要先關閉,再修改配置才能生效。

 

這樣的代碼根本就實現不了所說的功能,直接運行出錯。連接池關閉后,就無法使用了。本身也沒有open,reopen之類的方法。

也有說C3P0支持熱修改,但本身好像有bug,容易出錯死鎖錯誤。也就沒有去研究到底支持不。

BasicDataSource 的close方法其實只設置了一個標識變量:closed,標記為關閉就取不到連接,要是能修改該標識為非關閉,就可以繼續使用了。

所以實現的思路是:先關閉,再修改配置,再打開標識。問題是BasicDataSource並沒有這樣的接口提供出來,幸運的是,BasicDataSource中的

closed屬性是protected,也就是我們可以在子類中訪問到這個屬性,也就可以進行修改了。

所以只要自定義一個類繼承於BasicDataSource,提供如下方法即可:

public void open(){
  this.closed=false;
 }

 

當然配置文件中使用的數據源的類名就需要改為這個自定義類了。

說明:文章為作者從CSDN遷移過來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM