1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/selfly-dexcoder-assistant

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
dy-datasource.md 7.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 16:00 ac775f5

Дексодер-дал позволяет легко преобразовать статический источник данных в динамический в конфигурационном файле, без необходимости изменения какого-либо бизнес-кода.

Первый шаг: объявление источника данных в Spring

<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 используется следующий порядок:

  • каталог conf Tomcat;
  • каталог проекта;
  • classpath.

Это сделано для того, чтобы при развёртывании проекта не приходилось часто изменять конфигурацию, независимо от среды разработки или рабочей среды.

Также необходимо заменить все места использования исходного источника данных на 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>

Второй шаг: создание файла конфигурации динамического источника данных dynamic-ds.xml

Рассмотрим пример:

<?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&amp;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&amp;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&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
    </datasource>
</dataources>
  • dataources — корневой тег, фиксированный;
  • datasource — соответствует одному источнику данных:
    • Attributes:
      • id — идентификатор источника данных, который удобно использовать для просмотра в журнале, какой источник данных использовался в операции;
      • class — класс DataSource, используемый источником данных (например, dbcp, c3p0 и другие крупные источники данных);
      • default — является ли он источником данных по умолчанию. Соответствует spring defaultTargetDataSource, должен быть только один.
    • properties:
      • weight — вес, значение int, хотя и не ограничено, но рекомендуется установить разумное и понятное значение, например, общий вес равен 10;
      • mode — режим чтения и записи, r — чтение, w — запись, rw — чтение и запись;
      • другие свойства, которые могут быть установлены в этом месте, определяются используемым конкретным источником данных. Это эквивалентно свойствам, которые можно установить в spring при объявлении источника данных.

Третий шаг: объявить перехватчик для динамического источника данных

<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&amp;characterEncoding=utf-8");
map.put("username", "root");
map.put("password", "");
dsList.add(map);
dynamicDataSource.initDataSources(dsList);

В реальной ситуации вы можете использовать прослушиватели, сокеты, центры конфигурации и т. д., чтобы реализовать функцию динамического изменения источника данных, при условии, что вы вызываете метод initDataSources с правильными параметрами источника данных.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/selfly-dexcoder-assistant.git
git@api.gitlife.ru:oschina-mirror/selfly-dexcoder-assistant.git
oschina-mirror
selfly-dexcoder-assistant
selfly-dexcoder-assistant
master