Flyway在Callbacks中排除了一些迁移

时间:2016-12-01 13:31:02

标签: java spring spring-data flyway

我想知道有没有办法在运行时使用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 个答案:

答案 0 :(得分:1)

Flyway提供了一个工具来实现这一目标。

首先是locations,您可以使用它来填充开发/测试迁移。

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

第二个是resolvers。有点重量级但可以用来实现类似的东西。

就个人而言,我使用了第一个选项来隔离开发迁移。