我似乎不能让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
以上似乎都不起作用。
我怎样才能让飞行员知道迁徙的地点呢?
7条答案
按热度按时间j2datikz1#
我有一个不同的问题,我的迁移文件名是
V1_Base_version.sql
而不是V1__Base_version.sql
。Flyway要求在名称前缀中使用双下划线__
。xeufq47z2#
在我的例子中,我得到了这个错误消息,因为我是通过IDE中的复制粘贴创建文件夹的(而不是像通常那样手动创建的)。
实际上我有(这不起作用):
而不是正确的(有效):
db.migration
版本显然不起作用,但在IDE上很难发现。vsmadaxz3#
默认情况下,Flyway将在db/migration下的类路径上查找迁移,在Maven项目中,这意味着src/main/resources/db/migration。
确保您有这样的目录。
参考flyway-db-migration-folder
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表或删除上一次运行对应的记录,重新滚动!
k10s72fa5#
你必须聚集或取消注解线飞行路线。位置与
flyway.localtions=filesystem:.
flyway.conf配置文件。
cmssoen26#
在我的情况下,我有
-
(破折号字符)在名称中的迁移像V20220508-1900__init.sql
.删除-
修复了这个问题fiei3ece7#
从V2开始编号,V1版本的脚本被忽略。我不明白为什么,但这正是它对我的工作原理。