【问题标题】:Spring autowiring in flyway飞道中的弹簧自动装配
【发布时间】:2020-05-27 03:19:34
【问题描述】:

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

好像是在 Flyway 6.0 中添加的:This issue 好像在谈论它,但我真的不知道如何进行。

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

谢谢

【问题讨论】:

    标签: java spring flyway


    【解决方案1】:

    假设您使用的是 Spring Boot:

    1. 首先您需要通过将spring.flyway.enabled 设置为false 来禁用flyway 的初始化和触发。这也意味着您必须自己配置 Flyway。
    2. 使用 @Component 注释您的 JavaMigrations 类。
    3. 创建一个实现CommandLineRunner 并实现run 方法的类。此类还应该自动连接您的 JavaMigrations,并且您的数据源 URL、用户和密码也需要注入,或者注入 DataSource 对象。
    4. 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();
        }
    }
    

    【讨论】:

    • 你不需要转spring.flyway.enabled =false。只要你的类路径中有myJavaMigration,上面的代码就可以简化为Flyway.configure().javaMigrations(myJavaMigration).load()
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2019-06-22
    • 2014-07-08
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多