You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flyway社区版能否添加自定义校验?含文件后缀校验需求

Flyway社区版实现自定义文件后缀校验(仅接受.sql,忽略.SQL)

Flyway社区版没有内置配置项直接实现这种后缀校验,但可以通过自定义MigrationResolver来达成需求,以下是具体实现方案:

实现思路

Flyway的迁移文件加载逻辑由MigrationResolver接口控制,我们可以自定义实现该接口,在解析迁移文件时过滤掉后缀为.SQL的文件,仅保留.sql后缀的文件。

代码实现示例

自定义MigrationResolver

import org.flywaydb.core.api.resolver.MigrationResolver;
import org.flywaydb.core.api.resolver.ResolvedMigration;
import org.flywaydb.core.internal.resolver.CompositeMigrationResolver;
import org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver;
import java.util.List;
import java.util.stream.Collectors;

public class CaseSensitiveSqlMigrationResolver implements MigrationResolver {
    private final MigrationResolver delegate;

    public CaseSensitiveSqlMigrationResolver() {
        // 复用默认的SQL迁移解析器逻辑
        this.delegate = new CompositeMigrationResolver(List.of(new SqlMigrationResolver()));
    }

    @Override
    public List<ResolvedMigration> resolveMigrations() {
        return delegate.resolveMigrations().stream()
                // 过滤仅保留小写.sql后缀的文件
                .filter(migration -> migration.getScript().endsWith(".sql"))
                .collect(Collectors.toList());
    }
}

配置自定义Resolver

Spring Boot项目

注册自定义Resolver为Spring Bean即可:

import org.flywaydb.core.Flyway;
import org.springframework.boot.autoconfigure.flyway.FlywayProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FlywayConfig {
    @Bean
    public Flyway flyway(FlywayProperties flywayProperties) {
        Flyway flyway = Flyway.configure()
                .dataSource(flywayProperties.getUrl(), flywayProperties.getUser(), flywayProperties.getPassword())
                .locations(flywayProperties.getLocations())
                // 绑定自定义解析器
                .resolvers(new CaseSensitiveSqlMigrationResolver())
                .load();
        flyway.migrate();
        return flyway;
    }
}

纯Java项目

直接在Flyway初始化时指定自定义Resolver:

Flyway flyway = Flyway.configure()
        .dataSource("jdbc:h2:mem:testdb", "sa", "")
        .locations("classpath:db/migration")
        .resolvers(new CaseSensitiveSqlMigrationResolver())
        .load();
flyway.migrate();

注意事项

  • 上述示例复用了Flyway默认的SQL迁移解析逻辑,仅添加过滤规则,不会影响Java迁移等其他类型的迁移加载。
  • 该方案完全基于Flyway社区版的扩展能力实现,无需依赖商业版功能。

内容的提问来源于stack exchange,提问作者Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:00:57