#postgresql #spring-boot #kubernetes #docker-compose #kompose
Вопрос:
У меня есть приложение Spring Boot, которое действует как REST API, оно использует JPA и Hibernate для сопоставления объектов с таблицами базы данных PostgreSQL. Я собираюсь развернуть свое приложение при выпуске через Kubernetes. Все приложение построено с помощью окна настройки инструментов-создать, а затем преобразовано с помощью инструмента Создать. Несколько раз объектная модель изменяется, поэтому схема таблицы базы данных для этого объекта. Как лучше всего развернуть мое приложение и новые схемы баз данных в Kubernetes без изменения записей, потери пользовательских данных или предотвращения каких-либо конфликтов с базой данных?
Комментарии:
1. Используйте какой-нибудь инструмент управления миграцией баз данных, например liquibase
Ответ №1:
Вам следует отключить создание схемы гибернации, чтобы убедиться, что она не удаляет данные.
Далее вам следует выяснить, является ли Liquibase https://www.liquibase.org/ или Взлетно-посадочная полоса https://flywaydb.org/ подходит для вашего варианта использования для объединения миграций в рамках вашего приложения.
Комментарии:
1. Поэтому для liquibase я протестировал небольшой проект, который подключается к базе данных postgresql, я внес изменения в один из столбцов в качестве примера сценария сначала удалил столбец с именем first_name , затем синхронизировал данные liquibase, но он не применяет обновления. Я действительно вижу столбец first_name , но у него есть нулевое значение. Таким образом, liquibase не создает резервные копии данных и не может передавать данные из старого столбца в новый столбец?
2. Это правильно, вам нужно создать пользовательскую миграцию, которая соответствует вашим намерениям, либо скопировав данные, либо, что еще лучше, переименовав столбец вместо создания нового
3. @Я пробовал liquibase, но когда код выталкивается, у меня есть gitlab-runner , который создает новый образ docker и помещает его в реестр контейнеров, после чего он преобразует образ docker с помощью Compose в артефакт Kubernetes , но контейнер docker для базы данных будет удален из модуля, так как обойти это?