Flyway - 在

问题描述 投票:0回答:7

我似乎无法让 flyway 知道在哪里寻找我的迁移。 我的文件结构是默认的spring initializr生成的。 我的迁移在:./demo/src/main/kotlin/db/migration 我的迁移是 java based

我的 application.properties 文件如下所示:

spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://${JDBC_DATABASE_URL}/jpaTestDatabase
spring.datasource.username=${JDBC_DATABASE_USERNAME}
spring.datasource.password=${JDBC_DATABASE_PASSWORD}

spring.flyway.baseline-on-migrate=true
spring.flyway.locations=classpath:demo/src/main/kotlin/db/migration

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
spring.session.store-type=none

我尝试了几个类路径:

/demo/src/main/kotlin/db/migration
demo/src/main/kotlin/db/migration
/src/main/kotlin/db/migration
src/main/kotlin/db/migration

以上似乎都不起作用。

如何让 flyway 知道迁移在哪里?

spring-boot flyway
7个回答
38
投票

我有一个不同的问题,我的迁移文件名是

V1_Base_version.sql
而不是
V1__Base_version.sql
。 Flyway 需要在名称前缀中使用双下划线
__


34
投票

就我而言,我收到该错误消息是因为我在 IDE 中通过复制粘贴创建了文件夹(而不是像通常那样手动创建)。

我实际上有(没有用):

src/main/resources/db.migration/

而不是正确的(有效的):

src/main/resources/db/migration/

db.migration
版本明显不行,但是在IDE上很难发现


21
投票

默认情况下,Flyway 将在 db/migration 下的类路径中查找迁移,在 Maven 项目中这意味着 src/main/resources/db/migration。

确保你有这样的目录。

参考flyway-db-migration-folder


1
投票

在我的例子中,诀窍是:一旦 Flyway 成功运行更新脚本,它会创建表 flyway_schema_history,记录我已经成功运行过一次创建脚本。

我在执行过程中来回播放,改变 spring.jpa.hibernate.ddl-autovalidate 然后 create-drop,然后返回。

所以,当我第二次尝试运行脚本时,它被拒绝了,但是因为当应用程序在 spring.jpa.hibernate.ddl 中运行时关闭时,最初创建的表(在我的例子中称为“自行车”)被删除了-上次 auto=create-drop 模式,我得到了

SchemaManagementException: Schema-validation: missing table [bike]
例外。

解决方法是:drop flyway_schema_history 表或者去掉之前run对应的记录,重新roll!


0
投票

你必须聚合或取消注释线 flyway.locations with

flyway.localtions=文件系统:.

进入 flyway.conf 配置文件。


0
投票

在我的例子中,我有

-
(破折号)以迁移的名义像
V20220508-1900__init.sql
。删除
-
解决了问题


0
投票
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>
    <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <version>9.16.1</version>
        </dependency>
database:
  url: postgresql://localhost:5433/db_name
spring:
  flyway:
    baseline-description: true
    baseline-on-migrate: true
    create-schemas: true
    default-schema: public
    enabled: true
    locations: classpath:db/migration
    password: ${spring.r2dbc.password}
    schemas: public
    url: jdbc:${database.url}
    user: ${spring.r2dbc.username}
    validate-on-migrate: true
  r2dbc:
    password: postgres
    url: r2dbc:postgresql://localhost:5433/db_name
    username: postgres
  • V2__create_car.sql(示例)

从V2开始编号,V1版本的脚本忽略。我不明白为什么,但这正是我的工作方式。

© www.soinside.com 2019 - 2024. All rights reserved.