Skip to content

Настройка источников данных

Библиотека autumn-data поддерживает работу с множественными источниками данных через конфигурацию в рамках autumn framework.

Основные понятия

Источник данных

Источник данных определяет подключение к конкретной базе данных. Каждый источник данных имеет:

  • Имя - уникальный идентификатор источника
  • Тип коннектора - класс коннектора для подключения к БД
  • Строку соединения - параметры подключения к БД
  • Параметры коннектора - дополнительные параметры

Менеджер сущностей

Менеджер сущностей управляет моделью данных для конкретного источника данных и предоставляет хранилища сущностей.

Конфигурация одного источника данных

Как json

json
{
    "data": {
        "ИсточникиДанных": {
            "Основной": {
                "ТипКоннектора": "КоннекторSqlite",
                "СтрокаСоединения": "Data Source=database.db"
            }
        }
    }
}

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

Как массив с одним элементом

bsl
Детальки = Новый Соответствие();

СекцияData = Новый Соответствие();
Детальки.Вставить("data", СекцияData);

ИсточникиДанных = Новый Соответствие();
СекцияData.Вставить("ИсточникиДанных", ИсточникиДанных);

ИсточникиДанных.Вставить("ТипКоннектора", "КоннекторSQLite");
ИсточникиДанных.Вставить("СтрокаСоединения", "Data Source=database.db");

СоветДругогоМастера = Новый СоветДругогоМастера();
СоветДругогоМастера.ЗначенияДеталек(Детальки);

Поделка = Новый Поделка(СоветДругогоМастера);
Поделка.ЗапуститьПриложение();

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

Как соответствие

bsl
Детальки = Новый Соответствие();

СекцияData = Новый Соответствие();
Детальки.Вставить("data", СекцияData);

ИсточникиДанных = Новый Соответствие();
СекцияData.Вставить("ИсточникиДанных", ИсточникиДанных);

ИсточникиДанных.Вставить("Имя", "МойИсточник");
ИсточникиДанных.Вставить("ТипКоннектора", "КоннекторInMemory");

СоветДругогоМастера = Новый СоветДругогоМастера();
СоветДругогоМастера.ЗначенияДеталек(Детальки);

Поделка = Новый Поделка(СоветДругогоМастера);
Поделка.ЗапуститьПриложение();

При такой конфигурации создается источник данных "МойИсточник". При обращении к хранилищам сущностей, менеджеру сущностей и в описаниях сущностей нужно будет явно указывать имя источника данных.

Конфигурация множественных источников данных

Как json

json
{
    "data": {
        "ИсточникиДанных": [
            "Основной": {
                "ТипКоннектора": "КоннекторSQLite",
                "СтрокаСоединения": "Data Source=main.db"
            },
            "Дополнительный": {
                "ТипКоннектора": "КоннекторPostgreSQL",
                "СтрокаСоединения": "Host=localhost;Database=testdb;Username=user;Password=pass"
            }
        ]
    }
}

Как массив с несколькими элементами

bsl
Детальки = Новый Соответствие();

СекцияData = Новый Соответствие();
Детальки.Вставить("data", СекцияData);

ИсточникиДанных = Новый Массив();
СекцияData.Вставить("ИсточникиДанных", ИсточникиДанных);

ИсточникДанных = Новый Соответствие();	
ИсточникДанных.Вставить("Имя", "Основной");
ИсточникДанных.Вставить("ТипКоннектора", "КоннекторInMemory");

ИсточникиДанных.Добавить(ИсточникДанных);

ИсточникДанных = Новый Соответствие();
ИсточникДанных.Вставить("Имя", "Дополнительный");
ИсточникДанных.Вставить("ТипКоннектора", "КоннекторSQLite");
ИсточникДанных.Вставить("СтрокаСоединения", "FullUri=file::memory:?cache=shared");

ИсточникиДанных.Добавить(ИсточникДанных);

СоветДругогоМастера = Новый СоветДругогоМастера();
СоветДругогоМастера.ЗначенияДеталек(Детальки);

Поделка = Новый Поделка(СоветДругогоМастера);
Поделка.ЗапуститьПриложение();

При задании нескольких источников данных кодом доступен только вариант с массивом.

Указание источника данных для сущности

Если используется только один источник данных без явного указания имени, то по умолчанию сущности будут использовать его. Для указания конкретного источника в режиме работы с несколькими источниками данных используйте параметр ИсточникДанных в аннотации &Сущность:

bsl
// Использует единственный источник данных
&Сущность(ИмяТаблицы = "Пользователи")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

// Использует явно указанный дополнительный источник данных
&Сущность(ИмяТаблицы = "Документы", ИсточникДанных = "Дополнительный")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Указание источника данных для хранилища сущностей

Аналогично для хранилищ сущностей:

bsl
// Хранилище для единственного источника данных
&ХранилищеСущностей("Пользователь")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

// Хранилище для дополнительного источника данных
&ХранилищеСущностей("Документ", ИсточникДанных = "Дополнительный")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Получение хранилищ из контейнера

При использовании множественных источников данных хранилища регистрируются в контейнере с составными именами:

bsl
// Для основного источника
ХранилищеПользователей = Поделка.НайтиЖелудь("ХранилищеСущностейОсновнойПользователь");

// Для дополнительного источника  
ХранилищеДокументов = Поделка.НайтиЖелудь("ХранилищеСущностейДополнительныйДокумент");

// Также можно использовать прозвища
ХранилищеПользователей = Поделка.НайтиЖелудь("ХранилищеСущностейОсновной");
ХранилищеДокументов = Поделка.НайтиЖелудь("ХранилищеСущностейДополнительный");

Поддерживаемые типы коннекторов

Библиотека поддерживает все коннекторы из библиотеки entity:

  • КоннекторSQLite
  • КоннекторPostgreSQL
  • КоннекторJSON
  • КоннекторInMemory (для тестирования)
  • И другие коннекторы, поддерживаемые entity

Параметры коннектора

Некоторые коннекторы могут требовать дополнительные параметры, которые передаются через массив ПараметрыКоннектора:

json
{
    "data": {
        "ИсточникиДанных": {
            "Дополнительный": {
                "ТипКоннектора": "КоннекторPostgreSQL",
                "СтрокаСоединения": "Host=localhost;Database=testdb",
                "ПараметрыКоннектора": [      
                    "дополнительный_параметр"
                ]                             
            }
        }
    }
}
bsl
Детальки = Новый Соответствие();

СекцияData = Новый Соответствие();
Детальки.Вставить("data", СекцияData);

ИсточникиДанных = Новый Соответствие();
СекцияData.Вставить("ИсточникиДанных", ИсточникиДанных);

ИсточникиДанных.Вставить("ТипКоннектора", "КоннекторSQLite");
ИсточникиДанных.Вставить("СтрокаСоединения", "Data Source=database.db");

ПараметрыКоннектора = Новый Массив();
ПараметрыКоннектора.Добавить("дополнительный_параметр");
ИсточникиДанных.Вставить("ПараметрыКоннектора", ПараметрыКоннектора);

СоветДругогоМастера = Новый СоветДругогоМастера();
СоветДругогоМастера.ЗначенияДеталек(Детальки);

Поделка = Новый Поделка(СоветДругогоМастера);
Поделка.ЗапуститьПриложение();