1

我以前在我的大部分项目中都使用过flyway,从来没有遇到过这样的问题。我责怪奥斯吉。让我们进入细节:

我已经这样配置了flyway:

Flyway flyway = Flyway.configure().locations("classpath:db/migration").dataSource(url, user, password).load();
flyway.migrate();

它拒绝工作,我收到一个错误:

Redgate 的 Flyway 社区版 6.4.3 无法解析位置类路径:db/migration。请注意,此警告将成为 Flyway 7 中的错误。

我已经检查过了,我在 jar 文件的根目录中有迁移 sql 文件,如预期的 *.jar/db/migration/。但是flyway找不到那些。以前我使用的是操作系统文件路径:

Flyway flyway = Flyway.configure().locations("filesystem:/opt/db/migrations").dataSource(url, user, password).load();

哪个工作正常。

我的 jar 被打包到 osgi 平台的 dp 文件包中,我认为这是一个问题,因为 osgi 运行时无法通过类路径找到。我无法通过网络找到任何解决方案。我找到了这样一个: https ://github.com/flyway/flyway/issues/1626

这对我来说很恐怖。我不明白为什么如此重要的功能被标记为:

总有一天——也许

我在向你征求任何建议。提前致谢。

4

1 回答 1

0

如果 db/migration 在您自己的捆绑包中,那么您可以尝试。

Flyway flyway = Flyway.configure(this.getClass().getClassLoader())
  .locations("classpath:db/migration")
  .dataSource(url, user, password).load();
flyway.migrate();

这样你告诉库使用你的类的类加载器,它是你的包的类加载器。(至少我希望如此。我对 Flyway 不熟悉,只是检查了 API 可能提供的内容)。

于 2021-04-26T09:26:48.937 回答