我有两个模块(editor
和engine
)可以使用一个公共数据库。对于脚本的部署,我想使用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
收集所有逻辑工作?
答案 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将被拾取,其他的将被忽略。