2016-09-29 3 views
1

Ich verwende c3p0 als meine JDBC-Datenquelle und frage mich, ob es eine Möglichkeit gibt, alle Verbindungsanmeldeinformationen in eine XML-Konfigurationsdatei zu übertragen, anstatt sie in meine Java-Klasse einzufügen.JDBC-Datenquellenkonfigurationen in einem XML-Format festlegen

Zum Beispiel, was zur Zeit ich habe, ist:

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"); 

und ich frage mich, ob ich abstrahieren kann dies alles in eine XML-Konfigurationsdatei aus ähnlich, wie Feder JDBC es tut?


Auch, was die beste Praxis mit mehreren verschiedenen Datenbank handelt, die unterschiedliche Verbindungsinformationen verfügen? Was ich momentan für diese Situationen habe, sind bedingte if-Anweisungen. Wenn Sie sich also in einer QA-Umgebung befinden, sind die Zugangsdaten ..., wenn die DEV-Umgebung die Zugangsdaten sind ... und so weiter. Aber ich denke nicht, dass das eine sehr gute Übung ist. Kann ich die verschiedenen DB-Umgebungen auch in eine XML-Konfigurationsdatei abstrahieren?

Antwort

2

Ich frage mich, ob es eine Möglichkeit, zu abstrahieren alle der Verbindung Anmeldeinformationen in eine XML-Konfigurationsdatei ist, anstatt es in meiner Java-Klasse platzieren?

Ja können Sie das XML Format eines Properties Objekt verwenden, um alle Ihre Schlüssel in einer XML Datei zu definieren und es dann Properties#loadFromXML(InputStream) mit laden.

So zum Beispiel, hier Ihre XML Datei könnte sein:

<?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> 

Dann laden Sie es als nächstes:

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

Von hier aus können Sie die Methoden verwenden getProperty(key) oder getProperty(key, defaultValue) zugreifen der Wert Ihrer verschiedenen Schlüssel.

+0

Vielen Dank! Das ist sehr hilfreich! Also, wenn ich verschiedene jdbc Treiber zu verbinden habe dann muss ich Xmls für jede von ihnen richtig erstellen? Oder kann ich sie in einer XML-Eigenschaftendatei speichern? – Robben

+1

beide können getan werden, es hängt von Ihren Anforderungen ab. Wenn Sie alles in der gleichen Datei haben möchten, müssen Sie einfach verschiedene Schlüsselnamen verwenden, damit Sie einfach Präfixe wie 'dev' hinzufügen können, dann wäre der Schlüssel' dev.driverClassName'. Aber in Ihrem Fall würde ich empfehlen, einen pro env zu haben –

Verwandte Themen