飞路集成到现有系统中

Posted

技术标签:

【中文标题】飞路集成到现有系统中【英文标题】:flyway integration into existing systems 【发布时间】:2013-03-03 01:08:16 【问题描述】:

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

但是,我不太确定如何进行:

我们有三个不同的数据库

    生产环境(mysql) 测试环境(MySQL) 单元测试(H2 内存中)

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

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

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

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

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

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

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

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

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

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

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

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

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

我们如何通过内存数据库将测试数据与 flyway 一起使用?

谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的回复。我假设我会根据我使用的弹簧配置文件使用 com.googlecode.flyway.core.Flyway 的位置属性使用 flyway 配置它。这是你的意思吗?其他步骤看起来还好吗? flyway.setLocations(...),是的,其他步骤看起来没问题。

以上是关于飞路集成到现有系统中的主要内容,如果未能解决你的问题,请参考以下文章

验证失败:检测到的应用迁移未在本地解决 |飞路

iOS现有工程 集成 flutter App.framework 找不到问题

Cms 与现有网站的集成

HSQL 和按位运算?

使用 Spring 进行数据迁移

是否有更好的地理定位数据库/技术/服务,或者是否有人在提高现有系统的准确性方面做过任何工作?