Flyway Init Order

时间:2017-06-21 20:28:06

标签: java spring-boot flyway

我有一个Java Spring Boot应用程序,在我的Maven pom.xml中将Flyway配置为依赖项(我有一个父pom和一个项目pom ......我的项目pom中定义了Flyway)。

class ViewController: NSViewController, NSWindowDelegate {
    override func viewWillAppear() {
        super.viewWillAppear()
        view.window?.delegate = self
    }
    func windowWillClose(_ aNotification: Notification) {
        print("windowWillClose")
    }
}

和application.properties中的几个条目:

<dependencies>
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>4.2.0</version>
    </dependency>
...

我可以运行maven任务让Flyway运行flyway.enabled=true flyway.out-of-order=true 来创建/更新我的数据库,然后针对它运行我的应用程序,但是我无法在它上面调用migrate正确的时间只需运行我的应用程序(这在产品中显然很重要)。看起来我的所有Spring类都首先被实例化,其中一些涉及查看数据库,然后Flyway迁移发生在之后,因此,例如,如果您针对空数据库运行应用程序,则应用程序在尝试访问任何内容时崩溃数据库。

在我的Spring Boot应用程序的启动过程中,有哪些提示可以查看我在哪里错误地让Flyway进行迁移?

3 个答案:

答案 0 :(得分:0)

我不确定您的数据源配置是什么样的,但您可以通过这样的方式声明您的JPA配置,使其依赖于flyway迁移。

您可以在任何@DependsOn("flyway")类或数据源bean上声明@Config注释,“flyway”是您的flyway配置bean的声明名称。然后,在您的flyway配置bean上,使用initMethod属性限定bean注释,如下所示:@Bean(initMethod = "migrate")

答案 1 :(得分:0)

尝试更改“flyway.out-of-order=false”

答案 2 :(得分:0)

我建议您尝试使用诸如 ApplicationStartedEvent 之类的事件监听器。

 @EventListener
  public void migrate(ApplicationStartedEvent applicationStartedEvent) {
           //do some checks
           flyway.migrate();
  }