当我为我的应用程序开发一个使用大量新表的新功能时,表定义在开发几天后才稳定。当我部署相同代码库的错误修复时,我想将这些不稳定的迁移文件签入源代码控制,而无需将它们应用于生产箱。
有没有办法将 flyway 中的迁移文件应用于开发人员机器而不是生产机器上?
我不喜欢特性分支,所以我想避免特性分支,它们对我来说维护起来太费力了。
当我为我的应用程序开发一个使用大量新表的新功能时,表定义在开发几天后才稳定。当我部署相同代码库的错误修复时,我想将这些不稳定的迁移文件签入源代码控制,而无需将它们应用于生产箱。
有没有办法将 flyway 中的迁移文件应用于开发人员机器而不是生产机器上?
我不喜欢特性分支,所以我想避免特性分支,它们对我来说维护起来太费力了。
由于我使用的是 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>