我正在使用Flyway保持数据库架构为最新。我希望使用flyway的maven插件在构建生命周期中自动执行此步骤,该插件将执行flyway:migrate
目标。
我应该将此目标绑定到哪个Maven阶段?我很困惑,因为有几个不同的用例。
我希望每次运行测试时都完全销毁并重建我的 test数据库,因此在test
阶段执行一次插件很有意义
在我的开发环境中,我希望每次构建项目时都可以迁移(而不是重建!)数据库,以保持架构最新。我可以将此绑定到... package
吗?还是compile
?
在我的生产环境中,我同样希望再次运行迁移,但是要在生产数据库上。这应该是自动化的还是应该手动运行?如果应该自动化,它将成为deploy
阶段的一部分吗?
谢谢!
答案 0 :(得分:0)
通常,您希望在运行时运行数据库迁移,而不是在使用 Maven 构建项目期间。
要在运行时运行迁移,请参考官方文档:https://flywaydb.org/documentation/usage/api/。它提供了几种配置方式:
import org.flywaydb.core.Flyway;
...
Flyway flyway = Flyway.configure().dataSource(url, user, password).load();
flyway.migrate();
// Start the rest of the application (incl. Hibernate)
...
<bean id="flywayConfig" class="org.flywaydb.core.api.configuration.ClassicConfiguration">
<property name="dataSource" ref="..."/>
...
</bean>
<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
<constructor-arg ref="flywayConfig"/>
</bean>
<!-- The rest of the application (incl. Hibernate) -->
<!-- Must be run after Flyway to ensure the database is compatible with the code -->
<bean id="sessionFactory" class="..." depends-on="flyway">
...
</bean>