我有一段处理elasticsearch索引的代码,其中有一个步骤,程序需要读取一个jsonschema文件才能继续执行。其中一个步骤是,程序需要读取一个jsonschema文件才能继续执行。这段代码在我的机器上运行良好,但当我在docker容器中以jar文件的形式执行时,它给我以下错误。
java.io.FileNotFoundException: dm.jsonschema (No such file or directory)
加载模式的代码是:
public class loadSchema {
private static final String JSON_SCHEMA_DOCUMENT = "dm.jsonschema";
....
public static JsonSchema tryLoadJSONSchema() {
JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
JsonNode cdmSchema = null;
try {
cdmSchema = JsonLoader.fromPath(JSON_SCHEMA_DOCUMENT);
} catch (IOException e) {
System.out.println(e);
System.exit(-1);
}
我把jsonschema文件放在容器中的jar文件旁边,但它一直给我同样的错误。有什么办法可以解决这个问题吗?
相对路径的问题 File
从您启动 java
可执行 user.home
),而不是从jar存档的位置。
最好的方法是使用一个系统属性来外部化这个文件位置。例如,如果你在系统中定义了一个 jsonSchemaPath
属性。
String path = Sytem.getProperty("jsonSchemaPath");
JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
JsonNode cdmSchema = JsonLoader.fromPath(path);
然后你可以在java命令中改变它。
java -jar yourcode.jar -DjsonSchemaPath=/path/to/dm.jsonschema