当前位置: 首页 > 知识库问答 >
问题:

液体基迁移在多模块分级项目集成试验中的应用

盛柏
2023-03-14

我正在模块化一个用Java开发的整体,它利用Micronaut框架和Gradle作为构建工具。如标题所示,它利用Liquibase进行数据库迁移。

这是一个标准的单级java项目,带有war插件来生成war文件。它在src/main/java/resources文件夹(标准micronaut-liquibase素材)中有所有迁移

我正在将各种独立的领域分解成单独的分级项目。我制作了一个startup项目,该项目应该具有所有的项目初始化逻辑,如Micronauts、context init和Liquibase DB迁移。

project/
|
+---gradle-project-A/
|   |
|   +---build.gradle
|   |
|   +---src/main/java/
|   |
|   +---src/test/
|       |
|       +---java/TestIntegration.java
|       |
|       +---resources/application.yml (for testing)
|
+---startup/
|   |
|   +---build.gradle
|   |
|   +---src/main/java/Application.java
|   |
|   +---src/main/java/resources/
|       |
|       +---db/changelog.sql files (These files are referred by the changelog.yml)
|       +---liqiubase-changelog.yml (Liquibase looks for this file in classpath)
|       +---application.yml (Micronaut config)
|
+---settings.gradle
|
|

startup/build.gradle的精简版本

plugins {
    'io.micronaut.application'
    'war'
}

dependencies {
    implementation project(':gradle-project-A')
}
  • 如文件夹结构所示,有些集成测试需要将所有liquibase迁移预先应用到数据库(测试容器)
  • 在旧结构中,迁移是在执行测试时拾取的,因为它们位于同一分级项目中。
  • 现在,迁移是startup的一部分,并且在gradle-project-a
  • 中运行集成测试时,它们显然不会被选中
  • 新的项目结构是受此帖子的启发
  • 我的问题似乎与StackOverflow上的问题类似,但我不确定我是否正确理解了它(不是分级专家)
    null

共有1个答案

司徒翼
2023-03-14

我要说您需要拆分project-aproject-b等的迁移脚本。

因此,在project-a/src/main/java/resources/中,您需要有project-a的迁移脚本,project-b等的迁移脚本。然后,在startup项目中,您可以有changelog.xml如下所示:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <include file="pathToChangeLogFromProjectA.xml" relativeToChangelogFile="true"/>
    <include file="pathToChangeLogFromProjectA.xml" relativeToChangelogFile="true"/>

</databaseChangeLog>

这样,启动将为所有项目选择迁移脚本,并且当您运行project-a测试时,将只运行该项目的脚本。

 类似资料:
  • Composer集成 Composer是PHP用来管理依赖关系的工具。你可以在自己的项目中声明所依赖的外部工具库,Composer会帮你安装这些依赖的库文件,我们首先来为框架添加Composer支持,让集成组件变得更简单,鉴于有些朋友比较排斥Composer,觉得很麻烦,我们这里还是啰嗦一下怎幺安装,熟悉Composer的朋友可以跳过这部分,在后面的教程中,相信大家都会认同PHP是世界上最好的语言

  • 我继承了一个具有以下设置的项目。Gradle中大约有5个单独的模块,分别位于5个不同的git存储库中。这些模块的版本控制是由ScmVersion插件驱动的。其中一个模块是一个将这些模块集成在一起的应用程序。 模块之间的依赖关系在build.gradle dependency部分中由groupId、artificatId和version指定。 我对Gradle很陌生。到目前为止,我已经创建了一个简单

  • 在一个Gradle多模块项目中,在它自己的模块中有bootstrapping,我无法使用MockMvc,因为它需要引用bootstrapping-module。我不确定我是否配置错误了什么。基本结构为: 模块:包含一些REST服务的模块,需要依赖于starter的testImplementation-Dependency starter:bootstrapping-module,用于应用sprin

  • 我正在我的querying-api模块中编写测试用例来测试我的API,并且我希望在测试开始用预定义的测试数据加载数据库之前运行我的数据库加载器服务,同时测试加载器是否仍然工作。但是,在运行时出现以下错误: 测试引用公共域定义库没有问题... 父POM文件: 数据库加载程序POM文件:

  • 使用validation验证器 仓库地址: validation 安装 composer require illuminate/validation 我们先单例validation验证器 namespace App\Vendor\Validators; use Illuminate\Validation\Factory; class Validator extends Factory {

  • 我想将一个多模块Spring-Boot1.5项目迁移到Spring-Boot2.1。这是一个gradle项目(4.9),但不知何故我没有得到解决。 例