Spring Boot Flyway -在中找不到迁移位置

7bsow1i6  于 2023-03-29  发布在  Spring
关注(0)|答案(7)|浏览(222)

我似乎不能让flyway知道在哪里查找我的迁移。我的文件结构是从spring initializr生成的默认值。我的迁移在:./demo/src/main/Kotlin/db/migration我的迁移基于java
我的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

以上似乎都不起作用。
我怎样才能让飞行员知道迁徙的地点呢?

j2datikz

j2datikz1#

我有一个不同的问题,我的迁移文件名是V1_Base_version.sql而不是V1__Base_version.sql。Flyway要求在名称前缀中使用双下划线__

xeufq47z

xeufq47z2#

在我的例子中,我得到了这个错误消息,因为我是通过IDE中的复制粘贴创建文件夹的(而不是像通常那样手动创建的)。
实际上我有(这不起作用):

src/main/resources/db.migration/

而不是正确的(有效):

src/main/resources/db/migration/

db.migration版本显然不起作用,但在IDE上很难发现。

vsmadaxz

vsmadaxz3#

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

参考flyway-db-migration-folder

tzxcd3kk

tzxcd3kk4#

在我的例子中,诀窍是:一旦Flyway成功运行了更新脚本,它就会创建表flyway_schema_history,该表记录了我已经成功运行了一次创建脚本。
我反复使用这个实现,将spring.jpa.hibernate.ddl-auto改为validate,然后create-drop,然后返回。
因此,当我第二次尝试运行脚本时,被拒绝了,但是由于最初创建的表(在我的情况下称为'bike')在应用程序关闭时被删除,当应用程序在spring.jpa.hibernate.ddl-auto=create-drop模式下运行时,我得到了
SchemaManagementException: Schema-validation: missing table [bike]异常。
解决方案是:删除flyway_schema_history表或删除上一次运行对应的记录,重新滚动!

k10s72fa

k10s72fa5#

你必须聚集或取消注解线飞行路线。位置与
flyway.localtions=filesystem:.
flyway.conf配置文件。

cmssoen2

cmssoen26#

在我的情况下,我有-(破折号字符)在名称中的迁移像V20220508-1900__init.sql .删除-修复了这个问题

fiei3ece

fiei3ece7#

<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版本的脚本被忽略。我不明白为什么,但这正是它对我的工作原理。

相关问题