java - 飞行路线集成到现有系统中

标签 java database spring database-migration flyway

我们正在考虑将 Flyway 集成到我们的系统中,因为它似乎是一个有效管理数据库迁移的好工具。

但是,我不太确定如何继续:

我们有三个不同的数据库

  1. 生产环境(MySQL)
  2. 测试环境(MySQL)
  3. 单元测试(H2 内存中)

它们都包含不同的数据(不同的用户等)。数据库之间没有公共(public)数据(在flyway页面上这称为引用数据),只有结构应该保持相同。

查看该网站,我的理解是这样进行:

  1. 我们必须从生产环境中提取架构版本并将其保存在 V1__BASE_version.sql 等文件中。我会这样做,例如与此:

    mysqldump -d -u 用户名 -p 密码 -h 主机名数据库名

  2. 我们通过获取结构的转储并将其与生产系统的结构进行比较(从差异开始,然后在不清楚的地方手动进行比较)来确保 ddl 与测试环境的匹配。 。万一我们发现任何差异,我们可以通过更改测试或实时的数据库结构来消除它们(取决于什么更有意义)。

  3. 我们使用主页中描述的初始版本的数据初始化所有数据库。对于不同的数据库,我使用不同的 -Durl=、-Dusername= 和 -Dpassword= 参数。

    mvn Flyway:init -Dflyway.initVersion=1 -Dflyway.initDescription="基础版本"

  4. 配置我们的 Spring 设置以拾取飞行路线(如主页所述)。这可以确保自动应用迁移,并且数据库与应用程序处于一致的状态

这是正确的方法吗? 我是否忘记了任何重要步骤?

关于将测试数据添加到内存数据库,我还有一个问题:

插入单元测试数据的正确位置在哪里? 即使我使用 spring 设置 Flyway 并使 hibernate 依赖于它使用

<bean id="sessionFactory" class="..." depends-on="flyway">
...
</bean>

数据源将在之前创建,当前这是我们添加架构和测试数据的位置。如果我们在创建数据源时仍然添加示例数据,如果我没有记错的话,架构将不是正确的。

我们如何使用内存数据库将测试数据与 Flyway 结合使用?

谢谢!

最佳答案

您可以配置包含测试数据脚本的额外位置。然后应将其配置为仅包含在单元测试中。

关于java - 飞行路线集成到现有系统中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413429/

相关文章:

java - Hibernate 与空列表比较?

java - 如何创建具有光泽颜色的 JMenuBar?

java - 通过 http 调用远程 .bat 文件

php - 使用 CodeIgniter 备份 MySQL 数据库

Spring Boot Camel Route - 从休息端点获取数据

java - 在 spring boot JPA 中,如何正确地将实体表示具有外键关联的对象发布到不同的实体?

java - android opengl es 1.1 - 某些设备上的绘图故障 - 内部屏幕截图

java - Gradle 不允许添加 '-processor' java(1.8) 编译器参数

ruby-on-rails - Rails - Postgres - 无法连接到服务器:连接被拒绝 (PG::ConnectionBad)

database - 在查询之前找到粗略时间的算法