java - 读取文件的罐子
问题描述
我有一个处理弹性搜索索引的代码。其中一个步骤是,程序需要读取 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