多くの新しいテーブルを使用するアプリケーションの新機能を開発しているとき、テーブル定義は開発の数日後まで安定していません。同じコードベースのバグ修正をデプロイするときに、これらの不安定な移行ファイルを本番ボックスに適用せずにソース管理にチェックインしたいと思います。
フライウェイの移行ファイルを開発者のマシンに適用するが、本番ボックスには適用しない方法はありますか?
私は機能ブランチが好きではないので、機能ブランチを避けたいのですが、それらは私が維持するにはあまりにも多くの労力を要します。
多くの新しいテーブルを使用するアプリケーションの新機能を開発しているとき、テーブル定義は開発の数日後まで安定していません。同じコードベースのバグ修正をデプロイするときに、これらの不安定な移行ファイルを本番ボックスに適用せずにソース管理にチェックインしたいと思います。
フライウェイの移行ファイルを開発者のマシンに適用するが、本番ボックスには適用しない方法はありますか?
私は機能ブランチが好きではないので、機能ブランチを避けたいのですが、それらは私が維持するにはあまりにも多くの労力を要します。
Spring 3.1を使用しているので、Springプロファイルを使用して問題を解決し、コードがどの環境にあるかを検出することができました。ソリューションの仕組みは次のとおりです。
db.migrations
本番環境の移行が行われる場所ですdev.db.migrations
開発の移行が行われる場所です。テーブルが1時間ごとに変更される新機能の初期開発中に、移行ファイルが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>