【问题标题】:Run Liquibase over Wix Embedded MySql在 Wix 嵌入式 MySql 上运行 Liquibase
【发布时间】:2019-10-05 03:10:15
【问题描述】:
目前我有一些使用 Spring Boot 和 H2 嵌入式数据库进行功能测试的新模块。
遗留模块与大量 Liquibase 脚本一起构建整个数据库。
我希望使用Wix Embedded Mysql 使测试数据库更像生产环境。阅读文档后,我没有找到任何关于如何使用 Liquibase 或 Flyway 等工具处理脚本的具体内容。
他启动后是否可以在这个嵌入式数据库上执行 Liquibase 目标?
【问题讨论】:
标签:
mysql
spring-boot
liquibase
embedded-database
【解决方案1】:
经过几天的研究,是的,有一种方法可以在 Wix Embedded MySQL 上运行 Liquibase。
这是一步一步的:
配置 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,所以我们可以通过编程方式访问 Liquibase 代码,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