Запустите Liquibase через Wix Embedded MySql

В настоящее время у меня есть несколько новых модулей, использующих Spring Boot и встроенную базу данных H2 для функционального тестирования.

Унаследованный модуль работает с множеством скриптов Liquibase для создания всей базы данных.

Я хотел использовать Wix Embedded Mysql, чтобы сделать тестовую базу данных более производственной. Прочитав документацию, я не нашел ничего конкретного о том, как обрабатывать скрипты с помощью таких инструментов, как Liquibase или Flyway.

Возможно ли выполнить цель Liquibase в этой встроенной базе данных после его запуска?


person nullptr    schedule 17.05.2019    source источник


Ответы (1)


После нескольких дней исследований, да, есть способ запустить Liquibase поверх Wix Embedded MySQL.

Вот пошаговая инструкция:

Настройка встроенной базы данных Wix

Конфигурация Wix довольно проста, как описано на их GitHub:

MysqldConfig config = aMysqldConfig(v5_7_latest)
    .withCharset(UTF8)
    .withPort(3060)
    .withUser("myuser", "mypassword")
    .withTimeZone("America/Sao_Paulo")
    .build();

EmbeddedMysql mysqld = anEmbeddedMysql(config)
    .addSchema("myschema")
    .start();

Конфигурация Liquibase

Я добавил в свой проект зависимость Liquibase maven, поэтому у нас есть программный доступ к коду Liquibase, здесь можно найти API.

Сначала нам нужно создать источник данных и передать Liquibase, чтобы найти правильную реализацию нашей базы данных, в результате чего мы сможем манипулировать объектом Liquibase для выполнения целей:

DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();

dataSourceBuilder.username(mysqld.getConfig().getUsername());
dataSourceBuilder.password(mysqld.getConfig().getPassword());
dataSourceBuilder.driverClassName(com.mysql.jdbc.Driver.class.getName());
dataSourceBuilder.url("jdbc:mysql://localhost:3060/myschema");

DataSource dataSource = dataSourceBuilder.build();

Database database = DatabaseFactory
                        .getInstance()
                        .findCorrectDatabaseImplementation(
                            new JdbcConnection(dataSource.getConnection()) // Fetch MySQL database implementation
                        );

Liquibase liquibase = new Liquibase("liquibase/mychanges.xml", // Path to liquibase changes
                                    new ClassLoaderResourceAccessor(), 
                                    database);

liquibase.update(new Contexts()); // This execute the liquibase:update on the embedded database
person nullptr    schedule 24.05.2019