2016-04-25 20 views
1

私は、DBの移行のためのフライウェイを使用しようとしていますし、塗布時の自動アップグレードDBのための春ブーツのフライウェイ・サポートは、その後、このデータベースは、しかし、私のJPA層完全自動DBアップグレード春ブートアプリケーション

によって使用されるアップを開始これは、主データソースの初期化が成功するように、スキーマがDB内に存在することを必要とします。飛行機の移動が起こる前に必要なスキーマを作成するSQLスクリプトを実行するために使用できるオプションは何ですか?私はフライウェイのGradleプラグインを使用(およびjdbc:mysql://localhost/mysqlとしてURLを与える。それは私のためのスキーマを作成しません。私は、これはアプリケーションの起動時にJavaコードから起こる作ることができた場合アムは思った場合。

+0

あなたは[この一部]に行っている(HTTPS ://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-execute-flyway-database-migrations-on-startup)oドキュメンテーション? –

+0

はい。そして、私の質問はまだ立っていると思います。スキーマを作成し、アプリケーションの起動時にマイグレーションを行う方法を知りたい。 –

+1

自分でフライウェイを使用しませんでしたが、空のデータベースが見つかった場合に移行がスキーマ自体を作成しませんか?とにかく、私が投稿したドキュメンテーションから、Springバッチの選択肢もあります。これはあなたが望むものを正確に実行します(初期化時にSQLスクリプトを実行します)。しかし、フライウェイにすべてをやってもらうのは良いことです。あなたは今行っている設定であなたの質問を編集できますか? –

答えて

0

フライウェイにはないことを

注意スキーマが空の場合は完全インストールをサポートします。マイグレーションごとのマイグレーションのみ 最初のマイグレーションでスキーマ/ユーザー作成スクリプトを追加できますが、マイグレーションスクリプトはsysdba/root/adminユーザーで実行する必要があります。各マイグレーションの開始時に現在のスキーマを設定する

フライウェイを使用する場合、スキーマをインストールするのが最も問題になりません最初に手動で行い、ベースラインのフライウェイタスクを(また手動で)行います。その後、次の移行が自動的に実行される準備が整いました。

Flywayは、データベース移行のための優れたツールですが、この特定の使用例をうまくカバーしません(初めてスキーマをインストールする)。

0

"アプリケーションの起動時にJavaコードからこの問題が発生するかどうかは疑問です。"

FlywayはJavaアプリケーションからのプログラム構成をサポートしているため、簡単な答えは「はい」です。フライウェイドキュメントの出発点は、ここで

https://flywaydb.org/documentation/api/ 

フライウェイは、標準のJDBCデータソースで動作するので、あなたはJavaでデータベースの作成プロセスをコーディングして、フライウェイは、スキーマ管理を扱うことができます見つけることができます。多くの環境では、データベース/スキーマの作成にはデータベースに対する管理者権限が必要であり、進行中のスキーマ管理にはアクセス権の低いアカウントが必要となるため、2つの手順が必要になります。あなたが必要なもの

0
  • は、インタフェース、あなたが追跡flyway class

  • に移行()メソッドを使用することができますコードから手動で移行を開始キックするためにFlywayCallback

  • に実装することですマイグレーションプロセスは、フライウェイクラスのMigrationInfoService()メソッドを使用して実行できます。

0

Unfoあなたのアプリケーションにスキーマが存在することを予期する単一のデータソースがある場合、Flywayはそのデータソースを使用してスキームを作成することができません。スキーマにバインドされていない別のデータソースを作成し、FlywayMigrationStrategyを使用して無制限のデータソースを使用する必要があります。あなたの特性で

をファイル:

@Bean 
@Primary 
@ConfigurationProperties("spring.datasource") 
public DataSourceProperties primaryDataSourceProperties() { 
    return new DataSourceProperties(); 
} 

@Bean 
@Primary 
@ConfigurationProperties("spring.datasource") 
public DataSource primaryDataSource() { 
    return primaryDataSourceProperties().initializeDataSourceBuilder().build(); 
} 

@Bean 
@ConfigurationProperties("spring.bootstrapDatasource") 
public DataSource bootstrapDataSource() { 
    return DataSourceBuilder.create().build(); 
} 

そして、あなたのFlywayMigrationStrategyファイル内:configファイルで

spring: 
    datasource: 
    url: jdbc:mysql://localhost:3306/myschema 
    bootstrapDatasource: 
    url: jdbc:mysql://localhost:3306 

@Inject 
@Qualifier("bootstrapDataSource") 
public void setBootstrapDataSource(DataSource bootstrapDataSource) { 
    this.bootstrapDataSource = bootstrapDataSource; 
} 

@Override 
public void migrate(Flyway flyway) { 
    flyway.setDataSource(bootstrapDataSource); 
    ... 
    flyway.migrate() 
} 
関連する問題