Spring flyway 中的自动装配

Spring autowiring in flyway

如何在实现 org.flywaydb.core.api.migration.JavaMigration 的 class 中注入 Spring bean?

好像是在Flyway 6.0中加入的:This issue好像在说,但是我真的不知道怎么进行。

我也看到 似乎在谈论它,但我希望有一个更短的解决方案(我没有作者所说的关于 JPA 依赖性的要求)。

谢谢

假设您正在使用 Spring 引导:

  1. 首先,您需要通过将 spring.flyway.enabled 设置为 false 来禁用 flyway 的初始化和触发。这也意味着您必须自己配置 Flyway。
  2. @Component.
  3. 注释你的 JavaMigrations classes
  4. 创建一个实现CommandLineRunner的Class,实现运行方法。这个 class 还应该有你的 JavaMigrations 自动连接和你的数据源 url,用户和密码也需要被注入,或者一个 DataSource 对象。
  5. run 方法中将您的 JavaMigrations 对象收集到一个数组中,并以编程方式将它们注册到 Flyway,然后 运行 迁移:

    JavaMigrations migrations[] = {myJavaMigration};
    Flyway flyway = Flyway.configure()
                         .dataSource(url, user, password)
                         .javaMigrations(migrations)
                         .load();
    flyway.migrate();
    

完整实施:

@Component
public class MyJavaMigration extends BaseJavaMigration {
...
}

@Component
public class MyFlywayMigration implements CommandLineRunner {

    @Autowired
    private MyJavaMigration myJavaMigration;

    @Autowired
    private DataSource dataSource; 

    @Override
    public void run(String... args) {
      JavaMigrations migrations[] = {myJavaMigration};
      Flyway flyway = Flyway.configure()
                            .dataSource(dataSource)
                            .javaMigrations(migrations)
                            .load();
      flyway.migrate();
    }
}