2016-09-29 8 views
1

私はJDBCデータソースとしてc3p0を使用しています。すべての接続資格情報をJavaクラスに置くのではなくXML設定ファイルに抽象化する方法があるのでしょうか?例えば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環境なら資格証明...などです。しかし、私はそれがとても良い習慣だとは思わない。また、さまざまなDB環境をXML構成ファイルに抽象化することはできますか? 資格情報XML設定ファイルに抽象すべての接続への道は私の Javaクラスに置くのではなく、存在する場合

答えて

2

私は疑問に思って?

はいあなたはXMLファイルにすべてのキーを定義するためにPropertiesオブジェクトのXMLの形式を使用して、Properties#loadFromXML(InputStream)を使用して、それをロードすることができます。あなたがアクセスするためのメソッドgetProperty(key)またはgetProperty(key, defaultValue)を使用することができます

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

ここから:

したがって、たとえば、ここにあなたの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> 

その後、あなたは次のようにそれをロードします異なるキーの値

+0

ありがとうございました!これは非常に役に立ちます!だから私は接続する別のjdbcドライバを持っている場合、私は正しいそれらのそれぞれのxmlsを作成する必要がありますか?または、それらを1つのXMLプロパティファイルに格納できますか? – Robben

+1

の両方があなたの要件に応じてそれを行うことができます。同じファイルにすべてを持たせたいのであれば、単に異なるキー名を使う必要があります。単に 'dev'のような接頭辞を追加するだけでキーは' dev.driverClassName'になります。しかし、あなたの場合、私はenvあたり1つを持つことをお勧めします –

関連する問題