2016-09-29 3 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"); 

и мне интересно, если я могу абстрактные все это, чтобы файл конфигурации XML подобно тому, как весна JDBC делает это?


Кроме того, что будет лучше всего использовать несколько разных баз данных, имеющих разные учетные данные? То, что у меня в настоящее время для этих ситуаций, является условным, если операторы, поэтому, если вы находитесь в среде QA, учетные данные ..., если среда DEV, то учетные данные ... и так далее. Но я не думаю, что это очень хорошая практика. Могу ли я также абстрагировать различные среды БД в файле конфигурации XML?

ответ

2

мне интересно, если есть способ абстрагироваться все соединения учетные данные в файл конфигурации XML вместо того, чтобы поместить его в моем класса Java?

Да, вы можете использовать формат 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'. Но в вашем случае я бы рекомендовал иметь один за каждый –