gpt4 book ai didi

typesafe-stack - 类型安全配置 : best pattern for overriding substitutions in later settings?

转载 作者:行者123 更新时间:2023-12-04 05:51:16 30 4
gpt4 key购买 nike

好的,我已经尝试了以下方法,但并没有产生我想要的效果。我有一个 reference.conf指定相对于前缀的文件系统位置,看起来有点像这样:

// reference.conf
myapp {
// The dummy path makes the error message easy to diagnose
s3.prefix = "s3://environment/variable/S3_PREFIX/missing"
s3.prefix = ${?S3_PREFIX}

file1 = ${myapp.s3.prefix}"/file1.csv"
file2 = ${myapp.s3.prefix}"/file2.csv"
// ...
}

然后我提供一个 application.conf文件看起来或多或少是这样的:
// application.conf
myapp.s3.prefix = "s3://some-bucket/some/path/to/the/files"
myapp.file2 = "s3://some-other-bucket/some/path/file2.csv"

现在,当我的应用程序执行 ConfigFactory.load() , 从 :
  • 解析 reference.conf文件,执行替换,并生成 Config对象,其中:
  • myapp.s3.prefix = "/environment/variable/S3_PREFIX/missing"
  • myapp.file1 = "/environment/variable/S3_PREFIX/missing/file1.csv"
  • myapp.file2 = "/environment/variable/S3_PREFIX/missing/file2.csv" .
  • 解析 application.conf文件并生成 Config对象,其中:
  • library.prefix = "/some/path/to/the/files"
  • myapp.file2 = "s3://some-other-bucket/some/path/file2.csv" .
  • 合并两个对象,使用 reference.conf对象作为后备。由此产生的 Config因此,对象具有:
  • library.prefix = "s3://some-bucket/some/path/to/the/files" (如 application.conf )
  • library.file1 = "s3://environment/variable/S3_PREFIX/missing/file1.csv" (如 reference.conf )。
  • library.file2 = "s3://some-other-bucket/some/path/file2.csv" (如 application.conf )。

  • 但是正如您可能从我的示例中猜到的那样,我想要做的是拥有 reference.conf指定相对于根目录的默认路径,并允许 的任意组合两者 这些:
  • 覆盖 application.conf 中的默认根目录, 这样默认的相对路径来自 reference.conf从那里抬头。
  • 覆盖 application.conf 中任何单个文件的路径,因此应用程序可以使用不在根目录中的路径。

  • 到目前为止,我唯一能想到的是:
    // reference.conf
    myapp {
    // The dummy path makes the error message easy to diagnose
    s3.prefix = "s3:/environment/variable/S3_PREFIX/missing"
    s3.prefix = ${?S3_PREFIX}

    file1 = "file1.csv"
    file2 = "file2.csv"
    // ...
    }

    // application.conf
    myapp.s3.prefix = "s3://some-bucket/some/path/to/the/files"
    myapp.file2 = "s3://some-other-bucket/some/path/file2.csv"


    // The Java code for using the config must append prefix and file location,
    // and needs to have smarts about relative vs. absolute paths.

    final Config CONF = ConfigFactory.load();

    String getS3URLFor(String file) {
    String root = CONF.getString("myapp.s3.prefix");
    String path = CONF.getString("myapp." + file);
    return relativeVsAbsoluteSensitiveMerge(root, path);
    }

    String relativeVsAbsoluteSensitiveMerge(String root, String path) {
    if (isAbsoluteReference(path)) {
    return path;
    } else {
    return root + "/" + path;
    }
    }

    boolean isAbsoluteReference(String path) {
    // ...
    }

    我真的不喜欢这个解决方案。有人能想到更好的东西吗?

    最佳答案

    您可以先解析,然后解析:

    ConfigFactory.parseResources(s"file.conf")
    .withValue("myKey", ConfigValueFactory.fromAnyRef("newValue"))
    .resolve()

    关于typesafe-stack - 类型安全配置 : best pattern for overriding substitutions in later settings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27160840/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com