有没有办法让flyway中的迁移文件应用于开发人员计算机而不是生产盒?

时间:2012-08-31 05:32:58

标签: database-migration flyway

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

有没有办法让flyway中的迁移文件应用于开发人员计算机上,而不是生产盒上?

我不喜欢功能分支,所以我想避免功能分支,他们只是为我维护太多的努力。

1 个答案:

答案 0 :(得分:5)

由于我使用Spring 3.1,我能够使用弹簧配置文件解决我的问题,以检测代码所处的环境。以下是解决方案的工作原理。

  • db.migrations是生产迁移的地方
  • dev.db.migrations是开发迁移的地方。在表格每小时更改一次的新功能的初始开发期间,迁移文件将添加到dev.db.migrations并检入源代码控制,它将在开发人员计算机上创建。开发人员通常会吹掉测试数据库并使用示例数据重新创建它,因此在dev.db.migrations中不断更改文件不会有任何损害,它还使开发人员有机会获取更改的版本号,因为他们将检查他们的文件进入源控制。

下面是我使用的弹簧配置文件飞路配置的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>