Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Flyway排除回调中的某些迁移_Java_Spring_Spring Data_Flyway - Fatal编程技术网

Java Flyway排除回调中的某些迁移

Java Flyway排除回调中的某些迁移,java,spring,spring-data,flyway,Java,Spring,Spring Data,Flyway,我想知道是否有一种方法可以在运行时使用Flyway的Callback方法排除一些迁移 我已经在他们身上做了一些工作,但我想排除一些描述中包含dev的迁移 谢谢 编辑:将我的简单更改添加到迁移解析器 @Override public Collection<ResolvedMigration> resolveMigrations() { assert flyway != null; assert flyway.getLocations() != null; ass

我想知道是否有一种方法可以在运行时使用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;
}
@覆盖
公共集合解析迁移(){
断言flyway!=null;
断言flyway.getLocations()!=null;
断言flyway.getLocations().length>0;
List migrations=Lists.newArrayList();
对于(字符串stringLocation:flyway.getLocations()){
位置位置=新位置(stringLocation);
Scanner Scanner=新的扫描仪(ClassLoader.getSystemClassLoader());
Resource[]resources=scanner.scanForResources(位置,
flyway.getSqlMigrationPrefix(),
getSqlMigrationSuffix());
for(资源:资源){
如果(!resource.getFilename()包含(“\u dev”)){
ResolvedMigrationImpl resolvedMigration=提取迁移信息(位置、资源);
resolvedMigration.setPhysicalLocation(resource.getLocationOnDisk());
setExecutor(新的SqlMigrationExecutor(新的PostgreSQLDbSupport(flywayConnection)),
资源,,
新的占位符替换器(flyway.getPlaceholders(),
flyway.getPlaceholderPrefix(),
flyway.getPlaceholderSuffix()),
getEncoding());
迁移。添加(resolvedMigration);
}
}
排序(迁移,新的ResolvedMigrationComparator());
}
返回迁移;
}
Flyway已经提供了一个工具来实现这一点

第一个是您可以用来筒仓您的开发/测试迁移的

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

├── 迁移嗯,是的,我知道这一点,但很明显,当项目开始时,我们不知道我们可以做到这一点,所以我们最终使用了类似于
V1\u 0\u dev\u test.sql的东西。我想我要么重构,要么检查一下解析器,如果可以解决的话。谢谢好的,我编写了我的实现,它工作得很好,并且在它们的描述中没有添加带有
\u dev
的迁移,但问题是-它仍然运行这些迁移。。。有什么想法吗?是的,它基本上和Flyway的一样,但是有一个小小的改变-它检查文件描述,看看是否应该将其添加到已解决的迁移中。把它贴在OP上。