使用 Spring Boot 运行基于 Flyway Java 的回调

Fer*_*iro 7 java spring flyway spring-boot

有没有办法使用 Spring Boot运行基于 Flyway Java 的回调?我正在转换一个现有项目,在每次迁移后都会更新一些视图定义,这是由 Java 完成的,因为它需要一些额外的逻辑。我知道它可以在 pl/pgsql 中完成(我们正在使用 Postgres)但它已经在 J​​ava 中完成和测试。

Spring boot 文档说这是可能的,但它列出了回调脚本应该与迁移位于同一目录中,也许这仅适用于基于 SQL 的回调。

此代码在没有 Spring Boot 的情况下工作:

    Flyway flyway = new Flyway();
    flyway.setDataSource(this.getDataSource());
    flyway.setLocations("/db/migration");
    flyway.setCallbacks(new LogMaintenanceFlywayCallback());
    flyway.migrate();
Run Code Online (Sandbox Code Playgroud)

我有几次迁移,/db/migration每次迁移之后我都需要执行我的回调。它适用于我当前的项目,我需要在 Spring Boot 中执行相同的操作(或其他方式来获得相同的行为)。

小智 5

你可以有这样的配置,它会起作用:

@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();
    }
}
Run Code Online (Sandbox Code Playgroud)