运行 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
目前我有一些新模块使用 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