Java 将flyway集成到现有系统中

Java 将flyway集成到现有系统中,java,database,spring,database-migration,flyway,Java,Database,Spring,Database Migration,Flyway,我们正在考虑将flyway集成到我们的系统中,因为它似乎是一个高效管理数据库迁移的好工具 但是,我不太清楚如何进行: 我们有三个不同的数据库 生产环境(MySQL) 测试环境(MySQL) 单元测试(内存中的H2) 它们都包含不同的数据(不同的用户等)。数据库之间没有公共数据(在flyway页面上称为参考数据),只有结构应保持不变 查看该网站,我的理解如下: 我们必须从生产环境中提取模式版本,并将其保存在V1_ubase_version.sql等文件中。我会这样做,例如用这个: mysqldum

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

但是,我不太清楚如何进行:

我们有三个不同的数据库

  • 生产环境(MySQL)
  • 测试环境(MySQL)
  • 单元测试(内存中的H2)
  • 它们都包含不同的数据(不同的用户等)。数据库之间没有公共数据(在flyway页面上称为参考数据),只有结构应保持不变

    查看该网站,我的理解如下:

  • 我们必须从生产环境中提取模式版本,并将其保存在V1_ubase_version.sql等文件中。我会这样做,例如用这个:

    mysqldump-d-u用户名-p密码-h主机名dbname

  • 我们通过获取结构的转储并将其与生产系统中的结构进行比较(从diff开始,然后在不清楚的地方手动进行比较),确保ddl与测试环境的ddl相匹配。在我们发现任何差异的不太可能的情况下,我们通过更改测试或现场的db结构(取决于更有意义的内容)来消除这些差异

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

    mvn飞道:init-Dflyway.initVersion=1-Dflyway.initDescription=“基本版本”

  • 将我们的spring设置配置为拾取flyway(如主页上所述)。这样可以确保自动应用迁移,并且数据库与应用程序处于一致状态

  • 这是正确的方法吗? 我忘了什么重要的步骤了吗

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

    插入单元测试数据的正确位置在哪里? 即使我使用spring设置flyway并使用

    <bean id="sessionFactory" class="..." depends-on="flyway">
    ...
    </bean>
    
    
    ...
    
    数据源将在之前创建,现在是我们添加模式和测试数据的地方。如果我们在创建数据源时仍然添加示例数据,那么如果我没有弄错的话,模式将不是正确的

    我们如何使用内存数据库将测试数据用于flyway


    谢谢

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

    谢谢您的回复。我假设我会使用flyway配置它,使用
    com.googlecode.flyway.core.flyway
    的locations属性,具体取决于我使用的spring配置文件。这就是你的意思吗?其他步骤看起来正常吗?flyway.setLocations(…),是,其他步骤看起来正常。