2016-12-01 10 views
0

私は、FlywayのCallbackメソッドを使用して、実行時にいくつかの移行を除外する方法があるのだろうかと思っていました。フライウェイはコールバックでいくつかの移行を除外します

私はすでにいくつかの作業を行っていますが、説明にはdevのマイグレーションを除外したいと思います。

ありがとうございます!

編集:フライウェイはすでにこれを行うためのツール(複数可)を提供し、移行リゾルバ

@Override 
public Collection<ResolvedMigration> resolveMigrations() { 
    assert flyway != null; 
    assert flyway.getLocations() != null; 
    assert flyway.getLocations().length > 0; 

    List<ResolvedMigration> migrations = Lists.newArrayList(); 


    for (String stringLocation : flyway.getLocations()) { 
     Location location = new Location(stringLocation); 

     Scanner scanner = new Scanner(ClassLoader.getSystemClassLoader()); 
     Resource[] resources = scanner.scanForResources(location, 
       flyway.getSqlMigrationPrefix(), 
       flyway.getSqlMigrationSuffix()); 

     for (Resource resource : resources) { 
      if (!resource.getFilename().contains("_dev")) { 
       ResolvedMigrationImpl resolvedMigration = extractMigrationInfo(location, resource); 
       resolvedMigration.setPhysicalLocation(resource.getLocationOnDisk()); 
       resolvedMigration.setExecutor(new SqlMigrationExecutor(new PostgreSQLDbSupport(flywayConnection), 
         resource, 
         new PlaceholderReplacer(flyway.getPlaceholders(), 
           flyway.getPlaceholderPrefix(), 
           flyway.getPlaceholderSuffix()), 
           flyway.getEncoding())); 

       migrations.add(resolvedMigration); 
      } 
     } 

     Collections.sort(migrations, new ResolvedMigrationComparator()); 
    } 

    return migrations; 
} 

答えて

1

に私の簡単な変更を追加しました。

最初はlocationsで、開発/テストの移行をサイロ化することができます。

src/main/resources 
└── db 
    ├── migration  <-- Common migrations here 
    └── dev-migration <-- Dev only migrations here 

第2はresolversです。もう少しヘビーウェイトですが、同様のことを達成するために使用することができます。

個人的には、最初のオプションを使用して開発移行を分離しました。

+0

ええ、私はそれについて知っていますが、プロジェクトが開始されたときに私たちはそれを実行できるかどうかわからなかったので、最終的に 'V1_0__dev_test.sql'のようなものを使用しました。私はちょうどリファクタリングする必要があると思う、または解決することができれば、私はリゾルバーをチェックアウトします。ありがとう! –

+0

OK、私の実装を書いた、それは正常に動作し、その説明に '_dev'でマイグレーションを追加しませんでしたが、問題は - それはまだそれらのマイグレーションを実行する...任意のアイデア? –

+0

あなたのリゾーバーは?ソースを投稿できますか? – markdsievers

関連する問題