2016-09-29 60 views
1

我正在使用c3p0作爲我的JDBC數據源,我想知道是否有一種方法可以將所有連接憑證抽象爲XML配置文件,而不是將其放置在我的Java類中?將JDBC數據源配置設置爲XML

例如,我目前擁有的是:

ComboPooledDataSource cpds = new ComboPooledDataSource(); 
cpds.setDriverClass("org.oracle.Driver"); //loads the jdbc driver 
cpds.setJdbcUrl("jdbc:oracle://localhost/testdb"); 
cpds.setUser("dbuser"); 
cpds.setPassword("dbpassword"); 

,我想知道如果我可以抽象出這一切,以類似彈簧JDBC是怎麼做的XML配置文件?


此外,處理具有不同連接憑證的多個不同數據庫的最佳實踐是什麼?我目前對這些情況所做的只是if語句,所以如果你在QA環境中,證書是......,如果是DEV環境,那麼憑證是......等等。但是,我認爲這不是很好的做法。我是否也可以將不同的數據庫環境抽象爲XML配置文件?

回答

2

我想知道,如果有,而不是把它放在我的 Java類的方式來抽象所有的連接 憑據到一個XML配置文件?

是的,你可以使用一個Properties對象的XML格式定義在XML文件中的所有你的鑰匙,然後用Properties#loadFromXML(InputStream)加載它。

因此,例如,在這裏您XML文件可能是:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
    <entry key="driverClassName">org.oracle.Driver</entry> 
    <entry key="jdbcUrl">jdbc:oracle://localhost/testdb</entry> 
    <entry key="user">dbuser</entry> 
    <entry key="password">dbpassword</entry> 
</properties> 

然後你會加載它作爲下一個:

Properties properties = new Properties(); 
try (InputStream is = new FileInputStream(file)){ 
    properties.loadFromXML(is); 
} 

從這裏你可以使用的方法getProperty(key)getProperty(key, defaultValue)來訪問你不同的密鑰的價值。

+0

非常感謝!這非常有幫助!所以,如果我有不同的jdbc驅動程序連接到那麼我將不得不爲每個人創建xmls正確?或者我可以將它們存儲在一個xml屬性文件中? – Robben

+1

兩者都可以完成,這取決於您的要求。如果你想在同一個文件中擁有所有的東西,你只需要使用不同的鍵名,這樣你就可以簡單地添加像dev這樣的前綴,那麼鍵就是'dev.driverClassName'。但在你的情況下,我會建議每個env有一個 –