Запуск Liquibase через Wix Embedded MySql - PullRequest
0 голосов
/ 17 мая 2019

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

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

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

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

1 Ответ

1 голос
/ 24 мая 2019

После нескольких дней исследований, да , есть способ запустить 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
...