Liquibase与多模块项目

时间:2019-08-22 14:51:58

标签: java spring spring-boot liquibase multi-module

我在项目中有两个模块(integrationTestmain)正在运行集成测试。我希望在测试之前,我的应用程序将使用liquibase启动和滚动迁移,但是由于我是通过集成测试模块运行应用程序的,因此liquibase正在寻找与该模块有关的主文件,该文件会导致错误。因为主文件位于带有miom应用程序(main)的模块中

我的项目的结构看起来像这样(为简洁起见,省略了一些类):

PROJECT
└───dataMigration
    │   build.gradle
    │
    └───src
        ├───main
        │   ├───java
        │   │     Application.java
        │   │
        │   └───resources
        │       │   application.yml
        │       │
        │       └───db
        │           └───changelog
        │                   db.changelog-master.xml
        │                   db.changelog-1.0.xml
        │        
        └──integrationTest
               ├───java
               │     IntegrationTest.java
               │
               └───resources
                       application-integration-tests.yml

如果我运行集成测试,则会收到以下错误消息

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Cannot find changelog location: class path resource [db/changelog/db.changelog-master.xml] (please add changelog or check your Liquibase configuration)

如果我像往常一样(从main模块运行应用程序,则一切正常。

如何使应用程序了解主文件位于应用程序本身的模块中,而不位于集成测试模块中?

1 个答案:

答案 0 :(得分:0)

由于您的resources目录应该是classpath的一部分,因此您可以将主变更日志文件位置指定为:

change-log: classpath:db/changelog/db.changelog-master.xml