Flyway 6 JavaMigrations 与 Spring Beans 的本机依赖注入

mar*_*618 2 dependency-injection flyway spring-data spring-boot

我见过许多很棒的解决方法来创建 Flyway JavaMigrations 并使用@DependsOn和注入 Spring Bean ApplicationContextAware(例如/sf/answers/3377000581/)。

然而,Flyway 6 文档的一部分声称 Spring Bean 本身可以进行依赖注入:

是真的吗?这将如何运作?

Stu*_*uck 5

将您的迁移标记为@Component并将它们放入spring扫描的文件夹中(例如,在您的应用程序包中,而不是在 中db.migrations)。这将确保@Autowired可以使用,因为 bean 是由 spring 实例化的。(其中的迁移db.migrations将由flyway自动扫描,并且不会由spring实例化。)

然后实现FlywayConfigurationCustomizer通过从 spring 上下文加载迁移来添加迁移:

@Configuration
class FlywayConfiguration implements FlywayConfigurationCustomizer {
    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public void customize(FluentConfiguration configuration) {
        JavaMigration[] migrationBeans = applicationContext
         .getBeansOfType(JavaMigration.class)
         .values().toArray(new JavaMigration[0]);
        configuration.javaMigrations(migrationBeans);
    }
}
Run Code Online (Sandbox Code Playgroud)