在多模块项目中使用Liquibase

时间:2019-06-22 18:26:03

标签: java spring-boot liquibase multi-module

我有两个模块(editorengine)可以使用一个公共数据库。对于脚本的部署,我想使用liquibase。我不想在两个地方重复相同的脚本,而是想在一个地方进行管理。为此,我创建了一个单独的模块(database-structure),该模块仅包含我的脚本和参数spring .liquibase.change-log=classpath:db/changelog/db.changelog-master.xml。我已将此模块(database-structure)添加为对其他模块的依赖。最终结构如下(为简洁起见,省略了类):

D:\PROJECTS\MY-PROJECT
├───database-structure
│   │   pom.xml
│   │
│   └───src
│       ├───main
│       │   ├───java
│       │   └───resources
│       │       │   application.properties
│       │       │
│       │       └───db
│       │           └───changelog
│       │               │   db.changelog-master.xml
│       │               │
│       │               └───1.0
│       │                       db.changelog-1.0.xml
│       │                       metadata_create.sql
│       │                       metadata_insert_data.sql
│       │                       metadata_rollback.sql
│       │
│       └───test
│           └───java
├───editor
│   │   pom.xml
│   │
│   └───src
│       ├───main
│       │   ├───java
│       │   └───resources
│       │       │   application.properties
│       │       │
│       │       └───META-INF
│       │               spring.factories
│       │
│       └───test
│           ├───java
│           │   └───ru
│           │       └───test
│           │           └───editor
│           │               └───EditorControllerTest.java   
│           │
│           └───resources
│                   application.yml
│       
│
└───engine
    │   pom.xml
    │
    └───src
        ├───main
        │   ├───java
        │   └───resources
        │           application.yml
        │
        └───test
            ├───java
            └───resources

但是,当我在editor(例如(EditorControllerTest.java)中开始测试时,出现错误,找不到Liquibase:

Caused by: java.lang.IllegalStateException: Cannot find changelog location: class path resource [db/changelog/db.changelog-master.yaml] (please add changelog or check your Liquibase configuration)

但是,我在spring.liquibase.change-log模块的application.properties中设置了database-structure参数。为什么忽略它?

如果我在editor模块中指定了此选项,则一切正常。如何在Liquibase模块的同一位置使用database-structure收集所有逻辑工作?

1 个答案:

答案 0 :(得分:1)

  

但是,我在下面设置了spring.liquibase.change-log参数   数据库结构模块中的application.properties。为什么会这样   被忽略了吗?

在运行时,与所有资源或类一样,在根目录(package com.example.tuteur; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; public class SharedPrefManager { private static final String SHARED_PREF_NAME = "CIN"; private static final String IDCONT = "con"; private static final String malade = "malade"; private static SharedPrefManager mInstance; private static Context ctx; public SharedPrefManager(Context context) { ctx = context; } public static synchronized SharedPrefManager getInstance(Context context) { if (mInstance == null) { mInstance = new SharedPrefManager(context); } return mInstance; } public void setIdCont(String id) { SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(IDCONT, id); editor.apply(); } //this method will give the logged in user public String getIdCont() { SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); return sharedPreferences.getString(IDCONT, null); } //this method will give the logged in user public void setMalade(String malade) { SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(malade, malade); editor.apply(); } //this method will give the logged in user public String getMalade() { SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); return sharedPreferences.getString(malade, null); } //this method will log the user out public void logout() { SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear(); editor.apply(); } } )上的类路径中找到的第一个application.properties将被拾取,其他的将被忽略。