读取文件的罐子

问题描述 投票:2回答:1

我有一段处理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文件旁边,但它一直给我同样的错误。有什么办法可以解决这个问题吗?

java docker jar
1个回答
0
投票

相对路径的问题 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
© www.soinside.com 2019 - 2024. All rights reserved.