【问题标题】:Proper way to handle error on ConfigFactory Load处理 ConfigFactory 加载错误的正确方法
【发布时间】:2017-03-23 20:03:29
【问题描述】:

我让我的应用选择要加载的 conf 文件:

-Dconfig.file=src/main/resources/dev.conf

我创建了一个设置特征,以便我可以轻松扩展设置并在我的应用程序中访问这些变量。在实现中,我以以下方式使用 ConfigFactory:

val config = ConfigFactory.load()

这是个问题。如果指定“dev.conf”的参数不存在,那么这将在其他中查找“application.conf”,并且不会设置“dev.conf”中的变量。该应用程序稍后会在尝试获取不在 conf 中的内容时爆炸。

如果我知道没有设置配置文件,我怎么能在这里立即炸毁? 'conf' 值不是 null/None,我无法直接访问可能已传入的 'dev.conf' 参数。

【问题讨论】:

    标签: scala configuration typesafe-config


    【解决方案1】:

    而不是使用ConfigFactory.load(), 你可以使用

    ConfigFactory.parseFile(new File(pathToYourConfig))
    

    这将确保您使用 -Dconfig 选项中的文件,并且该文件是可解析的。

    为确保配置文件包含所有必填字段,您必须进行完整性检查。我喜欢实例化一个类,它将我需要的所有配置字段分配给一个 val,比如

    class Settings(conf: Config) {
          val projectName = conf.getString("projectName")
          val database = conf.getString("database")
    }
    

    现在在应用程序启动时,如果指定给-Dconfig.file的配置文件中不存在该字段,则此类将引发异常

    【讨论】:

    • 第一部分没有达到目的,有一个 -Dconfig,因为现在我每次想从 dev.conf 切换到 staging.conf 时都必须更改代码(更改 pathToYourConfig 的值) prod.conf.
    • 我同意这种健全性检查 - 不幸的是,这可能是唯一的方法
    • 对于第一部分,您应该从 cli 参数中获取 pathToYourConfig,而不是对其进行硬编码。
    猜你喜欢
    • 2012-10-06
    • 2019-05-17
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多