【发布时间】:2016-10-13 07:48:12
【问题描述】:
有没有办法用 Spring boot 运行Flyway Java-based callbacks? 我正在转换一个现有项目,每次迁移后都会更新一些视图定义,这是由 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 中执行相同的操作(或以其他方式获得相同的行为)。
【问题讨论】:
-
它有效。您需要将您的 Java 类放在
db.migrations包中。 -
它们必须在标准中命名吗?我创建了一个
SomeMaintenanceFlywayCallback,实现了接口FlywayCallback,并且没有调用方法afterEachMigrate。我试图将课程重命名为AfterEachMigrate,但也没有成功。它在db.migrations包中,与执行的Java 迁移并排,所以构建路径没问题。 -
SQL 迁移应该在
src/main/resources/db/migration中。 Java 迁移应该在src/main/java/db/migration中。每个文件通常以Vxxx__some-text-here.sql或 Vxxx__MyJavaClass.java` 开头。 -
刚看到我的第一条评论是错误的。不是
db.migrations,而是db.migration。见docs.spring.io/spring-boot/docs/current/reference/html/… -
我也写错了,已经在
db.migration了。正如我所说,我的迁移正在执行,我需要的是回调,在每次迁移后运行一些代码。我已经更新了我的问题,以包含使用 Flyway 的手动方式。
标签: java spring spring-boot flyway