首页 > 解决方案 > 读取文件的罐子

问题描述

我有一个处理弹性搜索索引的代码。其中一个步骤是,程序需要读取 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 文件旁边,但它一直给我同样的错误。知道如何解决这个问题吗?

标签: javadockerjar

解决方案


的相对路径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

推荐阅读