【问题标题】:Flyway: no migration necessaryFlyway:无需迁移
【发布时间】:2021-02-21 12:43:55
【问题描述】:

有一个基于 Spring 的应用程序使用的数据库。 Flyway 未对数据库进行版本控制。

我已经在spring配置中添加了flyway相关的bean:

<bean id="flywayConfig" class="org.flywaydb.core.api.configuration.ClassicConfiguration">
        <property name="dataSource" ref="dataSource"/>
        <property name="baselineOnMigrate" value="true" />
        <property name="schemas" value="DB2INST1,SRVO"/>
        <property name="locations">
                <value>classpath:db</value>
        </property>
</bean>

<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
        <constructor-arg ref="flywayConfig"/>
</bean>

我已将用于测试目的的迁移脚本放置在:

src/main/resouces/db/V1.1__create.sql

它在SRVO 模式中创建一个表。

但是在应用启动后我可以看到表格

flyway_schema_history 已创建且仅包含一个条目

installed_rank|version|description          |type    |script               
--------------|-------|---------------------|--------|---------------------
             1|1      |<< Flyway Baseline >>|BASELINE|<< Flyway Baseline >>

为什么没有应用脚本?我没有注意到服务器日志中有任何错误。以下是与 Flyway 相关的摘录:

org.flywaydb.core.internal.scanner.classpath.ClassPathScanner - Scanning for classes at classpath:db
org.flywaydb.core.internal.database.DatabaseFactory - Database: jdbc:db2://localhost:50000/SRVO (DB2/LINUXX8664 11.5)
org.flywaydb.core.internal.database.DatabaseFactory - Driver  : IBM Data Server Driver for JDBC and SQLJ 4.13.127
org.flywaydb.core.Flyway - DDL Transactions Supported: true
org.flywaydb.core.Flyway - Schemas: DB2INST1,SRVO
org.flywaydb.core.Flyway - Default schema: null
org.flywaydb.core.internal.callback.SqlScriptCallbackFactory - Scanning for SQL callbacks ...
org.flywaydb.core.internal.command.DbValidate - Validating migrations ...
org.flywaydb.core.internal.command.DbValidate - Successfully validated 1 migration (execution time 00:00.012s)
org.flywaydb.core.internal.command.DbMigrate - Current version of schema "DB2INST1": 1
org.flywaydb.core.internal.command.DbMigrate - Schema "DB2INST1" is up to date. No migration necessary.

【问题讨论】:

标签: java spring flyway


【解决方案1】:

我认为您的问题在于您为 Flyway 定义模式的方式。从我看到你定义两个模式是这样的:

&lt;property name="schemas" value="DB2INST1,SRVO"/&gt;

从这些日志中可以看出,这被 Flyway 正确拾取:

org.flywaydb.core.Flyway - Schemas: DB2INST1,SRVO

我还可以看到迁移确实运行正确但是它对于 DB2INST1 架构而不是 SRVO 是这样做的——我认为这是您要在以下位置创建表的那个.

org.flywaydb.core.internal.command.DbMigrate - Current version of schema "DB2INST1": 1
org.flywaydb.core.internal.command.DbMigrate - Schema "DB2INST1" is up to date. No migration necessary

由于您像这样定义了两个模式,Flyway 默认会尝试在第一个找到的模式(被认为是默认模式)上执行迁移,如下所述:

https://flywaydb.org/documentation/configuration/parameters/schemas

所以你的选择有两个:

  1. 从架构列表中删除 DB2INST1 架构(不确定是否要让 Flyway 管理它)
  2. 使用此配置属性将默认架构显式设置为SRVOhttps://flywaydb.org/documentation/configuration/parameters/defaultSchema

希望以上对你有所帮助。

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 2013-03-03
    • 2018-06-27
    • 2019-01-16
    • 2018-10-20
    • 2018-05-10
    • 2020-05-29
    • 2018-02-28
    • 2015-03-10
    相关资源
    最近更新 更多