我有一个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进行迁移?
答案 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();
}