Дексодер-дал позволяет легко преобразовать статический источник данных в динамический в конфигурационном файле, без необходимости изменения какого-либо бизнес-кода.
<bean id="dynamicDataSource" class="com.dexcoder.dal.spring.datasource.DynamicDataSource">
<property name="dsConfigFile" value="dynamic-ds.xml"/>
</bean>
Как и любой другой bean, объявляем DynamicDataSource с одним свойством dsConfigFile, которое указывает на файл конфигурации динамического источника данных. По умолчанию это dynamic-ds.xml. Если вы не хотите менять значение по умолчанию, можно его опустить.
Для поиска файла конфигурации dsConfigFile используется следующий порядок:
Это сделано для того, чтобы при развёртывании проекта не приходилось часто изменять конфигурацию, независимо от среды разработки или рабочей среды.
Также необходимо заменить все места использования исходного источника данных на dynamicDataSource:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dynamicDataSource"/>
</property>
</bean>
Кроме того, необходимо настроить управление транзакциями:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dynamicDataSource"/>
</bean>
Рассмотрим пример:
<?xml version="1.0" encoding="UTF-8"?>
<dataources>
<datasource id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" default="true">
<property name="weight" value="10"/>
<property name="mode" value="w"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</datasource>
<datasource id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
<property name="weight" value="5"/>
<property name="mode" value="r"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</datasource>
<datasource id="dataSource3" class="org.apache.commons.dbcp.BasicDataSource">
<property name="weight" value="5"/>
<property name="mode" value="r"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db3?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</datasource>
</dataources>
<bean id="dynamicDsInterceptor" class="com.dexcoder.dal.spring.datasource.DynamicDsInterceptor"></bean>
На этом всё готово, теперь вы можете свободно использовать динамический источник данных в своём проекте.
DynamicDataSource
предоставляет метод initDataSources
для инициализации источников данных. Его параметр — List<Map<String, String>> dataSourceList
. Нужно просто передать список параметров источника данных в виде карты в этот метод, чтобы реализовать динамическое изменение. Вот простой пример:
List<Map<String, String>> dsList = new ArrayList<Map<String, String>>();
Map<String, String> map = new HashMap<String, String>();
map.put("id", "dataSource4");
map.put("class", "org.apache.commons.dbcp.BasicDataSource");
map.put("default", "true");
map.put("weight", "10");
map.put("mode", "rw");
map.put("driverClassName", "com.mysql.jdbc.Driver");
map.put("url",
"jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8");
map.put("username", "root");
map.put("password", "");
dsList.add(map);
dynamicDataSource.initDataSources(dsList);
В реальной ситуации вы можете использовать прослушиватели, сокеты, центры конфигурации и т. д., чтобы реализовать функцию динамического изменения источника данных, при условии, что вы вызываете метод initDataSources с правильными параметрами источника данных.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )