首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Gradle依赖项运行Flyway迁移?

如何从Gradle依赖项运行Flyway迁移?
EN

Stack Overflow用户
提问于 2019-09-19 16:18:16
回答 1查看 850关注 0票数 1

我有两个Spring Boot them服务,它们必须使用相同的数据库、相同的模式和相同的表-一个服务从表中读取,另一个服务向表中写入。现在,其中一个服务正在开发中,它使用内存中的DB而不是真正的DB,因此我可以让每个服务包含其自己的数据库迁移副本。一旦这两个服务与同一个数据库一起工作,这将无法工作-第一个启动的服务将运行其迁移,而另一个将失败。但这两个项目仍然必须进行迁移,因为需要它们来创建用于自动化测试的内存数据库。

作为一种解决方案,我正在做第三个项目,它的唯一职责是运行迁移,两个原始应用程序都会从这个新的应用程序中拉出迁移,但我被困在如何实现这一点上。

我所见过的最接近我需要的东西是来自another SO question的代码

代码语言:javascript
复制
sourceSets {
    main {
        resources {
            srcDirs += [
                project(':data').sourceSets.main.resources
            ]
        }
    }
}

但这是为了包含来自另一个本地项目的资源,而不是来自gradle依赖项。我已经列出了我的私有Maven代码库,并解决了依赖关系,但我不知道该写什么,而不是上面代码块的内部行。

代码语言:javascript
复制
repositories {
    mavenCentral()
    maven {
        url "http://my.repo.link/"
    }
}

dependencies {
    // other dependencies 
    runtime 'my.group:database-project:1.0'
}
EN

回答 1

Stack Overflow用户

发布于 2019-09-19 19:53:00

如果你使用的是Gradle多项目布局,并且你喜欢使用Flyway插件,我想你可以直接配置迁移文件夹。如下所示:

代码语言:javascript
复制
flyway {
  locations = ["filesystem:$rootDir/data/migrations"]
}

如果您使用的是独立项目,则可以使用java插件将迁移打包到jar文件中,将其发布到Maven库,并对其进行常规依赖。如果您不想将迁移放在应用程序类路径上,则可以将依赖项放在自定义配置中。如果你有一个非标准的文件夹结构,你可以通过locations参数中的classpath:值来配置它。如下所示:

代码语言:javascript
复制
configurations {
    flywayMigration
}

dependencies {
    flywayMigration "com.group:database-project:1.0" // Jar file containing your migration scripts
}

flyway {
    configurations = ["flywayMigration"]
    locations = ["classpath:db/migrations"]
}

除非我误解了您的要求,否则您不需要第三方项目来应用迁移。(当然,如果你愿意,你仍然可以这样做。)在我的项目中,我们处于类似的情况,我们让所有的Spring Boot应用程序将迁移脚本与它们捆绑在一起,然后在启动时,我们有问题地将迁移应用于数据库。在此场景中,在一个干净的数据库上,第一个应用程序将执行所有迁移,所有后续应用程序将只验证一切正常。Flyway也支持并行迁移,所以应该不会有任何并发问题。您可以通过将Flyway插件应用于所有引导项目来实现类似的操作,然后将任务从bootRun依赖到flywayMigrate。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58006651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档