有没有一种方法可以使用Spring Boot运行Flyway Java-based callbacks
我正在转换一个现有项目,该项目在每次迁移后都会更新一些 View 定义,这是由Java完成的,因为它需要一些额外的逻辑。我知道可以在pl/pgsql中完成(我们正在使用Postgres),但是它已经在Java中完成并经过测试。

Spring boot docs表示可能,但已列出回调脚本应与迁移位于相同的目录中,也许这仅适用于基于SQL的回调。

这段代码在没有Spring Boot的情况下有效:

    Flyway flyway = new Flyway();
    flyway.setDataSource(this.getDataSource());
    flyway.setLocations("/db/migration");
    flyway.setCallbacks(new LogMaintenanceFlywayCallback());
    flyway.migrate();

我在/db/migration中进行了几次迁移,每次迁移之后都需要执行回调。它可以在我当前的项目中工作,并且我需要在Spring Boot中执行相同的操作(或通过其他方式获得相同的行为)。

最佳答案

您可以有一个这样的配置,它将起作用:

@Configuration
public class FlywayFactory {

    @Bean
    public FlywayMigrationInitializer flywayInitializer(Flyway flyway, FlywayCallback flywayCallback) {
        flyway.setCallbacks(flywayCallback);
        return new FlywayMigrationInitializer(flyway);
    }

    @Bean
    public FlywayCallback flywayCallback() {
        return new LogMaintenanceFlywayCallback();
    }
}

09-05 21:35