我似乎无法让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
以上似乎都不起作用。
我如何让flyway知道迁移在哪里?
答案 0 :(得分:2)
默认情况下,Flyway将在db / migration下的类路径上查找迁移,这在Maven项目中表示src / main / resources / db / migration。
确保您具有这样的目录。
答案 1 :(得分:2)
我遇到了另一个问题,我的迁移文件名为V1_Base_version.sql
,而不是V1__Base_version.sql
。 Flyway在名称前缀中需要双下划线__
。
答案 2 :(得分:1)
在我的情况下,我收到了该错误消息,因为我是通过在IDE中通过复制粘贴创建文件夹的(而不是像通常那样手动创建)。
我实际上有(没用):
src/main/resources/db.migration/
而不是正确的(起作用的):
src/main/resources/db/migration/
db.migration
版本显然不起作用,但是很难在IDE上发现。
答案 3 :(得分:0)
您必须使用以下内容汇总或取消注释flyway.locations行
flyway.localtions =文件系统:。
进入flyway.conf配置文件。
答案 4 :(得分:0)
就我而言,诀窍是:一旦 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]
异常。
解决办法是:删除flyway_schema_history表或者删除上次运行对应的记录,重新滚动!