我应该将flyway:migration目标绑定到哪个行家阶段?

时间:2018-08-19 05:23:13

标签: maven flyway

我正在使用Flyway保持数据库架构为最新。我希望使用flyway的maven插件在构建生命周期中自动执行此步骤,该插件将执行flyway:migrate目标。

我应该将此目标绑定到哪个Maven阶段?我很困惑,因为有几个不同的用例。

  1. 我希望每次运行测试时都完全销毁并重建我的 test数据库,因此在test阶段执行一次插件很有意义

    < / li>
  2. 在我的开发环境中,我希望每次构建项目时都可以迁移(而不是重建!)数据库,以保持架构最新。我可以将此绑定到... package吗?还是compile

  3. 在我的生产环境中,我同样希望再次运行迁移,但是要在生产数据库上。这应该是自动化的还是应该手动运行?如果应该自动化,它将成为deploy阶段的一部分吗?

谢谢!

1 个答案:

答案 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>