我似乎无法让 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 知道迁移在哪里?
我有一个不同的问题,我的迁移文件名是
V1_Base_version.sql
而不是 V1__Base_version.sql
。 Flyway 需要在名称前缀中使用双下划线__
。
就我而言,我收到该错误消息是因为我在 IDE 中通过复制粘贴创建了文件夹(而不是像通常那样手动创建)。
我实际上有(没有用):
src/main/resources/db.migration/
而不是正确的(有效的):
src/main/resources/db/migration/
db.migration
版本明显不行,但是在IDE上很难发现
默认情况下,Flyway 将在 db/migration 下的类路径中查找迁移,在 Maven 项目中这意味着 src/main/resources/db/migration。
确保你有这样的目录。
在我的例子中,诀窍是:一旦 Flyway 成功运行更新脚本,它会创建表 flyway_schema_history,记录我已经成功运行过一次创建脚本。
我在执行过程中来回播放,改变 spring.jpa.hibernate.ddl-auto 到 validate 然后 create-drop,然后返回。
所以,当我第二次尝试运行脚本时,它被拒绝了,但是因为当应用程序在 spring.jpa.hibernate.ddl 中运行时关闭时,最初创建的表(在我的例子中称为“自行车”)被删除了-上次 auto=create-drop 模式,我得到了
SchemaManagementException: Schema-validation: missing table [bike]
例外。
解决方法是:drop flyway_schema_history 表或者去掉之前run对应的记录,重新roll!
你必须聚合或取消注释线 flyway.locations with
flyway.localtions=文件系统:.
进入 flyway.conf 配置文件。
在我的例子中,我有
-
(破折号)以迁移的名义像V20220508-1900__init.sql
。删除-
解决了问题
<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开始编号,V1版本的脚本忽略。我不明白为什么,但这正是我的工作方式。