Flyway DB迁移——如何访问应用服务(Spring已配置)

Flyway DB migration - how to access application services (Spring configured)

主要问题 - 这似乎是一个基本的飞路问题,我在研究过程中可能(不知何故)错过了这个问题但是 - 是否可以访问应用程序服务(spring 已配置)尝试使用 flyway 迁移数据时?下面是一些细节 -

其他详细信息 -

根据我们的要求 - 我们已经向几个 table 添加了几个新字段,作为发布的一部分,我们希望填充那些有数据的列。这需要我们(或飞路)执行以下算法 -

P.S。 - 我知道,在同一 table 中添加依赖于其他列的列不符合 3rd normal 等。但出于此 post 之外的原因,这是必需的。

技术堆栈 -

  1. Spring 引导 1.3.x
  2. 飞路 4.0.3
  3. 使用 Java 迁移

我试过的几个例子如下 -

我的飞行路线迁移class如下。

public class R__MigrationYeah implements SpringJdbcMigration {

  @Value("${mypath.subpath}") // this does not work !
  private String someStringIwannaUse;


  @Inject // this does not work either (even with Autowired or Const. injection)!
  private MyService myService;

}

我看到一些 posts / 博客有关于如何配置 flyways MigrationResolver 或 ConfigurationAware 等的复杂细节 - 不确定他们是否解决了这个问题(即使他们解决了 - 这是很多只是编写一个快速迁移脚本的工作 - 这是唯一的方法吗?)。

最后 - 我知道我遗漏了一些东西,因为如果我们必须编写 flyway Java 代码而不能使用任何现有应用程序 class es 通过 Spring,那么它与编写一个独立的迁移项目没有什么不同(因此除了使数据库连接可用之外,flyway 没有增加任何价值)——我确信这不可能。

任何帮助都会很好!

我认为您想比设计时更动态地使用 flyway。 基本上它只是针对 DB-Schema,你可以做任何 sql 可以做的事情,但是因为 它以一种您不希望的可重复、可靠、循序渐进的方式完成工作 其中的任何真实业务数据。 Flyway 使用你提供的静态脚本,你 不能让它们随时间动态变化(它会通过校验和不匹配来抗议)或 "API-Calls".

对于此类内容,您可以创建自己的 Spring 引导应用程序并通过它的 Java API 使用 Flyway。沿着这条线。

@SpringBootApplication
@Import(ServiceConfig.class)
public class FlyWayApp implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(FlyWayApp.class, args);
    }

    @Value("${mypath.subpath}")
    private String someStringIwannaUse;


    @Autowired
    private MyService myService;


    @Override
    public void run(String... args) throws Exception {
        // Create the Flyway instance
        Flyway flyway = new Flyway();


        // Point it to the database
        flyway.setDataSource("jdbc:h2:file:./target/foobar", "sa", null);

        //Fetch data and create migration scripts needed by Flyway
        myService.createMigrationScripts();

        // Start the migration
        flyway.migrate();
    }
}

无法在 flyway 迁移中使用依赖注入。

flyway 的下一个版本将支持从 spring bean 进行依赖注入。请参阅 Github issue for more details. On 是当前可用版本的解决方法。