Java 飞道初始阶
我有一个Java Spring启动应用程序,在Maven pom.xml中将Flyway配置为依赖项(我有一个父pom和一个项目pom…Flyway在我的项目pom中定义) 我可以运行一个maven任务,让Flyway运行Java 飞道初始阶,java,spring-boot,flyway,Java,Spring Boot,Flyway,我有一个Java Spring启动应用程序,在Maven pom.xml中将Flyway配置为依赖项(我有一个父pom和一个项目pom…Flyway在我的项目pom中定义) 我可以运行一个maven任务,让Flyway运行migrate来创建/更新我的数据库,然后运行我的应用程序,但是我很难让它在正确的时间调用migrate,只需运行我的应用程序(这在prod中显然很重要)。看起来我的所有Spring类都是先实例化的,其中一些涉及到查看数据库,然后再进行Flyway迁移,因此,例如,如果在空数据
migrate
来创建/更新我的数据库,然后运行我的应用程序,但是我很难让它在正确的时间调用migrate
,只需运行我的应用程序(这在prod中显然很重要)。看起来我的所有Spring类都是先实例化的,其中一些涉及到查看数据库,然后再进行Flyway迁移,因此,例如,如果在空数据库上运行应用程序,那么当尝试访问数据库中的任何内容时,应用程序会崩溃
关于在Spring Boot应用程序的启动过程中让Flyway更早地进行迁移的问题,有什么建议吗?我不确定您的数据源配置是什么样子的,但是您可以以一种依赖于Flyway迁移的方式声明您的JPA配置
您可以在任何
@Config
类或数据源bean上声明@DependsOn(“flyway”)
注释,“flyway”是您的flyway配置bean的声明名称。然后,在您的flyway配置bean上,使用initMethod属性限定bean注释,如下所示:@bean(initMethod=“migrate”)
我不确定您的数据源配置是什么样子的,但是您可以以使其依赖于flyway迁移的方式声明JPA配置
您可以在任何
@Config
类或数据源bean上声明@DependsOn(“flyway”)
注释,“flyway”是您的flyway配置bean的声明名称。然后,在您的flyway配置bean上,使用initMethod属性限定bean注释,如下所示:@bean(initMethod=“migrate”)
尝试更改“flyway.out-of-order=false”我建议您尝试使用类似ApplicationStartedEvent的事件列表器
@EventListener
public void migrate(ApplicationStartedEvent applicationStartedEvent) {
//do some checks
flyway.migrate();
}
我建议您尝试使用事件列表器,如ApplicationStartedEvent
@EventListener
public void migrate(ApplicationStartedEvent applicationStartedEvent) {
//do some checks
flyway.migrate();
}
在父pom中,是否存在Flyway依赖项。我们使用gradle,flyway显示在顶部。为了清楚起见,我已经在我的项目pom中定义了它,而不是我的父pom,但对于您的问题,虽然它列在第一位,但我没有指出任何特定的依赖项。也许我应该对此进行研究——否则,我可能还必须在代码中直接将其声明为已配置Bean,并在那里指示依赖关系。但无论哪种方式,我都不确定直接在Flyway上指示什么依赖项,因为依赖项指示之前必须配置什么。因此,我可能必须指出Flyway依赖于其他正在早期加载的东西。在您的父pom中,是否存在Flyway依赖关系。我们使用gradle,flyway显示在顶部。为了清楚起见,我已经在我的项目pom中定义了它,而不是我的父pom,但对于您的问题,虽然它列在第一位,但我没有指出任何特定的依赖项。也许我应该对此进行研究——否则,我可能还必须在代码中直接将其声明为已配置Bean,并在那里指示依赖关系。但无论哪种方式,我都不确定直接在Flyway上指示什么依赖项,因为依赖项指示之前必须配置什么。因此,我可能必须指出Flyway依赖于当前早期加载的其他东西。
@EventListener
public void migrate(ApplicationStartedEvent applicationStartedEvent) {
//do some checks
flyway.migrate();
}