0

当我为我的应用程序开发一个使用大量新表的新功能时,表定义在开发几天后才稳定。当我部署相同代码库的错误修复时,我想将这些不稳定的迁移文件签入源代码控制,而无需将它们应用于生产箱。

有没有办法将 flyway 中的迁移文件应用于开发人员机器而不是生产机器上?

我不喜欢特性分支,所以我想避免特性分支,它们对我来说维护起来太费力了。

4

1 回答 1

5

由于我使用的是 Spring 3.1,因此我能够使用 spring 配置文件来解决我的问题,以检测代码所在的环境。这是解决方案的工作原理。

  • db.migrations是生产迁移的去向
  • dev.db.migrations是发展迁移的去向。在新功能的初始开发过程中,当表每隔一小时左右更改一次时,迁移文件被添加到源代码控制中dev.db.migrations并被检入到源代码控制中,它是在开发人员机器上创建的。开发人员通常会删除测试数据库并使用示例数据重新创建它,因此不断更改其中的文件并没有什么坏处,dev.db.migrations也让开发人员有机会为他们的更改获取版本号,因为他们会将他们的文件签入源代码控制。

下面是我使用的 spring 配置文件 flyway 配置的 XML。

<!-- =========================Configure Flyway ========================= -->
<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
    <property name="dataSource" ref="dataSource"/>
    <property name="locations" ref="flyway-migration-locations" />
</bean>

<!-- ========================= Development Profile Configuration ========================= -->
<beans profile="development">
    <bean id="flyway-migration-locations" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <value>db.migration</value>
                <value>dev.db.migration</value>
            </list>
        </constructor-arg>
    </bean>
</beans>

<!-- ========================= Production Profile Configuration ========================= -->
<beans profile="production">
    <bean id="flyway-migration-locations" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <value>db.migration</value>
            </list>
        </constructor-arg>
    </bean>
</beans>
于 2012-08-31T07:00:44.703 回答