Я настраиваю процесс выпуска, чтобы максимально легко обновить нашу производственную среду.
Чтобы добиться этого в отношении базы данных, я выбрал liquibase. Каждый раз при обновлении среды:
- Код доставляется на серверы,
mvn liquibase:diff
запускается для создания журнала изменений с предыдущей версией mvn spring-boot:run
запускается, чтобы запустить приложение и выполнить liquibase с новым changeLog, и, таким образом, адаптировать базу данных из только что доставленного объекта кода.
Проблема заключается в том, что если поле вjava @Entity
, например, перемещен в другую сущность, liquibase удалит столбец без переноса данных в новое местоположение поля.
Так что мой вопросесть, можем ли мы сконфигурировать жидкость для избежать столбца и таблицы drop ? Чтобы иметь возможность копировать данные в их новые местоположения и после этого эффективно удалять столбец (или таблицу) навсегда?
Мы используем spring-boot 2.1.2 иПлагин liquibase maven 3.4.1 . Наша база данных находится на MySQL 5.7.27 .
Я пытаюсь найти способ экспорта всей базы данных создание / изменение changeSet
в одну changeLog.xml
ивсе капля changeSet
в другой changeLog.xml
. Таким образом, мы можем выполнить между этими двумя changeLog
, третий changeLog
, предназначенный для копирования данных в новое место. Бу не нашел решения в документации по жидкостям: https://www.liquibase.org/documentation/diff.html
Для иллюстрации моего примера:
v1 :
@Entity
public class Person {
private long id;
private String name;
private String phoneNumber;
}
Стал
v2 : (создание сущности Телефон для замены поля номер телефона сущности Персона )
@Entity
public class Person {
private long id;
private String name;
private Phone phone;
}
@Entity
public class Phone {
private long id;
private String phoneNumber;
private String brand;
}
Таким образом, когда v2 доставляется на сервер и запускается mvn liquibase:diff
, результат changeLog будет drop column phoneNumber и создавать столбец телефон в таблице человек . Без переноса данных из таблицы person , поданной phoneNumber в новую таблицу phone в поле phoneNumber .
хочувыполнить changeLog (вручную), чтобы скопировать Person.phoneNumber в новую сущность Phone.phoneNumber .
Возможно ли это? Или есть какой-то трюк, чтобы сделать это правильно? Или, может быть, я плохо использую жидкость для достижения этой цели?
Большое спасибо!