我有一个 Spring/H2/Hibernate 项目,正在尝试集成 flyway。该项目是使用 maven 构建的,并创建了一个 Jar,然后我将其包含在访问数据库的其他应用程序中。
我的问题是,当我测试 spring 项目 flyway 工作正常并创建我的架构时,但是当我在另一个项目中部署 lib 时,它似乎没有找到迁移脚本。我已经检查过了,它们在 jar 文件中。
我的 Spring 配置:
<bean id="flyway_database_1" class="org.flywaydb.core.Flyway" init-method="migrate">
<property name="dataSource" ref="dataSource1" />
<property name="locations" value="com.domain" />
<property name="sqlMigrationPrefix" value="DATABASE_1_V" />
</bean>
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${database.1.driver}" />
<property name="url" value="${database.1.url}" />
</bean>
我的应用程序在类路径中找到了 Spring Context XML 文件和属性文件,但 flyway 似乎没有找到 sql 文件。
对于我的位置,我尝试了“com.domain”、“com/domain”、“classpath:/”、“classpath:/database1/migration/”
所有这些都在 Spring 项目中工作,然后在包含 jar 时无法检测到文件。
关于为什么会这样有什么想法吗?
编辑:我认为这可能是因为我在 RCP 应用程序中包含了 jar,也许 FlyWay 检测文件的方式与 Spring 不同?
最佳答案
您使用的 flyway-core
是什么版本?从 jar 文件扫描 sql 脚本的 flyway 中存在一个错误。请看https://github.com/flyway/flyway/issues/1261了解详情。此问题已在 4.1 版本中修复,因此您可以尝试添加最新版本的 flyway-core
。
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.2.0</version>
</dependency>
编辑
您能否尝试使用 filesystem:
提供完整的位置路径,如下所示,看看它是否有效?
<property name="locations" value="filesystem:C:/project/spring-flyway/src/main/resources/db/migration" />
编辑
这是一个错误,需要在 Flyway 进行修复。 https://github.com/flyway/flyway/issues/1630 .目前,您可以在插件项目中创建 db/migration 文件夹,并将迁移 sql 文件保存在那里。
关于java - 为什么我的 RCP 应用程序无法检测到已部署的 Flyway/Spring 项目中的迁移文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742393/