Flyway の詳しい使用方法

Guanhui
リリース: 2020-07-28 18:31:38
転載
3707 人が閲覧しました

Flyway の詳しい使用方法

1. 開発中のデータベース管理で発生した問題:

現在、開発はチームで行われるのが一般的であるため、プロジェクトの同期に問題が生じます。コードの同期は SVN ツールを使用して管理できますが、データベースの同期はどうなるのでしょうか?理想的には、新しいプロジェクトを開発するときは、最初にビジネスを明確にし、データベースのテーブルを設計し、その後メンテナンスのために専門の担当者にデータベースを引き渡すので、データベースの同期の問題は発生しません。しかし、実際の状況はどうなのでしょうか?要件はプロジェクトの最初から最後まで変化し続けます。多くの企業には専任のデータベース保守担当者がいません。全員がデータベースの操作と変更を行っています。チームがタイムリーにコミュニケーションをとり、全員が毎年コードを更新していれば問題ありません。データベース、コミュニケーションがタイムリーでない場合は、笑(自分で決めることができます)。 。 。このようにして、データベースが同期していない問題が浮き彫りになります。

2. Flyway の簡単な紹介:

1. コンセプト:

Flyway はデータベース アプリケーション、管理、およびデータベースの変更を追跡するための独立したデータベース バージョン管理ツール。平たく言えば、SVN がさまざまな人々のコードを管理するのと同じように、Flyway はさまざまな人々の SQL スクリプトを管理することができ、それによってデータベースの同期を実現します。

2. サポートされているデータベースの種類:

Oracle、SQL Server、SQL Azure、DB2、DB2 z/OS、MySQL (Amazon RDS を含む)、MariaDB、Google Cloud SQL、PostgreSQL (Amazon を含む) RDS および Heroku)、Redshift、Vertica、H2、Hsql、Derby、SQLite、SAP HANA、solidDB、Sybase ASE、および Phoenix。

3. SQL スクリプトの命名規則:

V バージョン番号 (バージョン番号の番号は「.」または「_」で区切られます) 二重アンダースコア (バージョン番号を区切るために使用されます)および説明) ファイル説明のサフィックス名 (例: V2017.9.30__Update.sql)。

注: バージョン番号を同じにすることはできません。

4. Flyway が SQL スクリプトを読み取るためのデフォルトの場所:

プロジェクトのソース フォルダーの下の db/migration ディレクトリ。

5. コマンド:

合計 6 つの基本コマンドがあります: 移行、クリーン、情報、検証、ベースライン、修復。

3. Flyway の利点:

1. SQL スクリプトをサポートするだけでなく、データベースを直接操作するための Java コードもサポートします (flyway -core-x.x.x.jar);

2. Maven プラグインあり;

3. コマンドラインをサポート;

4. Spring box と組み合わせると非常に便利データベース機能を自動的にチェックしてアップグレードします。

4. Flyway コマンド ライン ツールの使用:

1. flyway-commandlin バージョンを解凍してダウンロードし、ローカルで解凍します。

2. SQL スクリプトを Flyway のデフォルトの db/migration ディレクトリに配置します。別の場所に配置した場合は、conf 内の flyway.locations を変更する必要があります。 /flyway.conf ファイル。

3. 独自の状況に応じて、conf/flyway.conf ファイル内の flyway.url、flyway.user、flyway.password を変更します。

4. コマンドラインで移行コマンドを実行します。

5. Maven プロジェクトと組み合わせて使用​​する:

1. 依存関係座標を導入する:

<!-- flyway -->
 <dependency>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-core</artifactId>
 <version>4.2.0</version>
 <dependency>
ログイン後にコピー

2. src/main/resources に作成するディレクトリ SQL バージョン ファイルを保存するパスは dataBase/sqlite (デフォルトのパス db/migration を記述することもできます) で、その下に SQL ファイルを配置します。

3. flyway の Java クラスを追加します:

package com.xxxxxx.flyway;
 
 import javax.sql.DataSource;
 import org.flywaydb.core.Flyway;
 
 public class MigrationSqlite {
 
 private DataSource dataSource;
 
 public void setDataSource(DataSource dataSource) {
 this.dataSource = dataSource;
 }
 
 public void migrate() {
 //初始化flyway类
 Flyway flyway = new Flyway();
 //设置加载数据库的相关配置信息
 flyway.setDataSource(dataSource);
 //设置存放flyway metadata数据的表名,默认"schema_version",可不写
 flyway.setTable("SCHMA_VERSION");
 //设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写
 flyway.setLocations("dataBase/sqlite");
 //设置sql脚本文件的编码,默认"UTF-8",可不写
 flyway.setEncoding("UTF-8");
 
 flyway.migrate();
 }
 }
ログイン後にコピー

4. Spring のステップ 3 の Java クラスをインスタンス化します:

<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate">
 <property name="dataSource" ref="dataSource"></property>
 </bean>
ログイン後にコピー

上記の Bean 定義から、flywayMigration Bean インスタンスにデータ ソースを挿入したことがわかります。Flyway のすべての操作はこのデータ ソースに対して実行されます。同時に、インスタンス化時に init-method 属性を通じて Spring を指定します。その後、Bean の移行メソッドがアクティブに実行され、このメソッド内で Flyway がデータベースを更新します。ここまでで、アプリケーションの起動時に Spring がコンテキストをインスタンス化し、Spring が flywayMigration Bean をインスタンス化すると、Flyway がデータベースを自動的に更新するところまで到達しました。

5. Flyway がデータベースを更新し、コード ロジックがデータベースを操作するときに競合を処理します (私はまだ遭遇していませんが、オンラインで見つけました。緊急用に保管しておきます):

Flyway がデータベースを更新する前に、アプリケーションの他のロジックが更新操作を完了する前に他の操作にデータベースを使用し始めます。これにより、アプリケーションに多くのバグが発生したり、まったく実行されなくなったりすることがあります。この問題を解決するには、Spring の Bean 依存関係原則を使用して、主要なデータベース操作 Bean を flywayMigration Bean に依存させ、flywayMigration がインスタンス化される (データベース更新操作が完了する) まで、他のデータベース関連の操作を実行できないようにします。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>
ログイン後にコピー

この方法では、プロジェクトが開始されるたびにデータベースが自動的に更新されるため、データベースが同期していないことを心配する必要はありません。

推奨チュートリアル: 「Java チュートリアル

以上がFlyway の詳しい使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!