Миграция схемы БД
Миграция схемы базы данных, или сокращенно миграция базы данных, – это процесс обновления схемы базы данных в соответствии с изменениями модели данных приложения.
Jmix использует Liquibase в качестве инструмента миграции базы данных.
Процесс
Jmix Studio создает скрипты миграции в формате Liquibase changelog, сравнивая текущее состояние сущностей JPA с текущей схемой базы данных соответствующего хранилища данных. Это происходит автоматически при запуске приложения с использованием конфигурации Run/Debug. Файл changelog сохраняется в исходном коде приложения и собирается в составе бинарного артефакта.
| Автоматическую генерацию Liquibase changelog можно отключить, открыв на редактирование Run/Debug configuration и удалив шаг Check Jmix Database, выполняющийся перед запуском. | 
Когда приложение запускается, оно автоматически запускает Liquibase со сгенерированными changelog для обновления подключенной базы данных.
| Вы также можете в любое время создать changelog с помощью действия Generate Liquibase Changelog и выполнить его с помощью действия Update в хранилище данных в окне инструментов Studio Jmix. | 
Дополнения, от которых зависит ваше приложение, также могут содержать файлы Liquibase changelog. Файлы changelog из зависимостей выполняются в базе данных раньше, чем в приложении.
Структура файлов changelog
Studio генерирует файлы changelog в каталоге src/main/resources/<base_package>/liquibase проекта приложения. Там Studio создает каталог changelog для основного хранилища данных и каталоги <store>-changelog для дополнительных хранилищ данных. Файлы changelog создаются в подкаталогах, соответствующих году и месяцу текущей даты. Имя каждого файла включает текущий день, порядковый номер в течение дня и случайную последовательность символов, чтобы избежать конфликтов, если несколько разработчиков работают над одним и тем же проектом.
├── liquibase/ (1)
│   ├── changelog/ (2)
│   │   ├── 010-init-user.xml (3)
│   │   └── 2020/
│   │       ├── 11/
│   │       │   ├── 12-010-fe2b82e6.xml (4)
│   │       │   └── 27-010-fe2b82e6.xml
│   │       └── 12/
│   │           └── 17-010-fe2b82e6.xml
│   ├── changelog.xml (5)
│   ├── locations-changelog/ (6)
│   │   └── 2020/
│   │       └── 11/
│   │           ├── 25-010-fe2b82e6.xml
│   │           └── 28-010-fe2b82e6.xml
│   └── locations-changelog.xml (7)| 1 | Корень структуры файлов changelog Liquibase. | 
| 2 | Каталог файлов changelog основного хранилища данных. | 
| 3 | Файл changelog, предоставляемый в новом проекте. Он создает таблицу для сущности User. | 
| 4 | Файлы changelog, которые генерирует Studio. | 
| 5 | Корневой файл changelog основного хранилища данных. | 
| 6 | Каталог файлов changelog хранилища данных locations. | 
| 7 | Корневой файл changelog хранилища данных locations. | 
Для каждого хранилища данных существует корневой файл changelog, расположенный в каталоге src/main/resources/<base_package>/liquibase. Он содержит директиву для включения всех сгенерированных файлов changelog в подкаталог changelog. Проект должен содержать свойство <data-store-name>.liquibase.change-log, указывающее путь к корневому changelog, например:
main.liquibase.change-log = com/company/demo/liquibase/changelog.xmlКорневой файл Liquibase changelog для главного хранилища содержит директивы include для файлов changelog всех дополнений, используемых в проекте. Это делает changelog совместимым с плагином Gradle для Liquibase и Liquibase CLI, что позволяет запускать Liquibase вне Studio и приложения, например на сервере CI.
Studio поддерживает включения автоматически при добавлении и удалении дополнений. Кроме того, при старте приложения Studio проверяет что включения в корневом changelog соответствуют дополнениям, используемым в проекте. При обнаружении расхождения отображается диалог с рекомендациями. Определенные пути можно добавить в игнорируемые, чтобы не получать о них уведомление впредь.
Вы можете написать файлы changelog Liquibase вручную и поместить их в структуру, описанную выше. Liquibase выполняет включенные файлы changelog в алфавитном порядке, учитывая их полный путь, поэтому давайте файлам соответствующие имена.
| Никогда не удаляйте корневой файл changelog.xml, так как он требуется для запуска процесса миграции. Кроме того, не удаляйте файлchangelog/010-init-user.xmlесли не собираетесь реализовывать нестандартную систему безопасности. | 
| Вы можете объединить несколько последних файлов changelog в один файл, используя действие Aggregate Liquibase Changelogs в контекстном меню хранилища данных в Jmix Studio. | 
Настройка Liquibase
Вы можете настроить свойства Liquibase для основного хранилища данных в application.properties таким же образом, как описано в документации Spring Boot (см. свойства spring.liquibase.*), но заменяя префикс spring.liquibase на main.liquibase, например:
main.liquibase.enabled = falseДля дополнительного хранилища данных замените main в имени свойства именем этого хранилища.
| Файл   | 
Игнорирование существующих таблиц
По умолчанию, Jmix Studio сравнивает с моделью данных все таблицы базы данных, и генерирует скрипты миграции, включающие команды DROP TABLE для таблиц, не отображенных на сущности. Если в вашей базе данных есть таблицы, не связанные с сущностями приложения, вы можете проигнорировать их, указав их префиксы или имена целиком через запятую в свойстве main.datasource.studio.liquibase.exclude-prefixes. Например:
main.datasource.studio.liquibase.exclude-prefixes = abc_,foo,bar