代码之家  ›  专栏  ›  技术社区  ›  Avi Bay

当版本为0时,Flyway迁移不起作用

  •  2
  • Avi Bay  · 技术社区  · 9 年前

    当我有一个版本号为0的文件时,Flyway不会将其选中。

    Maven依赖关系:

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

    弹簧配置:

    <bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
        <property name="dataSource" ref="dataSource" />
        <property name="baselineOnMigrate" value="true" />
        <property name="locations" value="classpath:/META-INF/db/" />
        <property name="placeholders">
            <map>
                <entry key="username" value="" />
            </map>
        </property>
    </bean>
    

    类路径中的文件:/META-INF/db/

    • sql/V0_1__INITIAL_BUILD。sql(创建表)
    • sql/V1___from-0.1.sql(添加一列)
    • sql/V1_4__from-1.3.sql(向表中添加索引)

    当我启动服务时,会出现此错误

    java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
    

    这是插入到 方案_版本 表格:

    COLUMN          |ROW1               |ROW2
    version_rank    |1                  |2
    installed_rank  |1                  |2
    version         |1                  |1.3
    description     |Flyway Baseline    |from-0.12
    type            |BASELINE           |SQL
    script          |Flyway Baseline    |sql/V1_3__from-0.1.sql
    checksum        |-993203535         |
    installed_by    |DBUSER2            |DBUSER2
    installed_on    |25-AUG-15          |25-AUG-15
    execution_time  |0                  |120
    success         1                   |0
    

    看起来它忽略了 sql/V0_1__INITIAL_BUILD.sql 实际创建表并立即移动到 sql/V1___来自-0.1.sql 并且失败。

    命令行工具似乎没有这个问题。

    是不能使用Spring将0作为版本号,还是我遗漏了一些明显的东西?

    1 回复  |  直到 9 年前
        1
  •  6
  •   Avis    9 年前

    默认情况下是正确的1是 基线版本 从中开始依次执行所有脚本。为了覆盖从1到0的默认版本,请在XML的飞行路线配置中使用以下内容:-

    <property name="baselineVersion" value="0" />
    

    谢谢