运行 Wix 嵌入式 Liquibase MySql

Run Liquibase over Wix Embedded MySql

目前我有一些新模块使用 Spring Boot 和 H2 嵌入式数据库进行功能测试。

遗留模块与大量 Liquibase 脚本一起构建整个数据库。

我希望使用 Wix Embedded Mysql 使测试数据库更像生产环境。阅读文档后,我没有发现任何关于如何使用 Liquibase 或 Flyway 等工具处理脚本的具体信息。

是否可以在他启动后在这个嵌入式数据库上执行 Liquibase 目标?

经过几天的研究,是的,有一种方法 运行 Liquibase over 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 dependency on my project, so we have access to Liquibase code programmatically, the API 可以在这里找到。

首先我们必须构建一个 datasource 并传递给 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