您还记得那一整天的时间来解决问题,只是意识到自己输入了错误的配置设置吗? 是。 这不仅是一次。
避免这种情况并非易事,不仅您自己,而且您使用的框架都应该小心。 但是,让我概述一下我的建议。
始终在启动应用程序时验证您的配置。 这涉及三件事:
首先,检查您的配置值是否正确。 测试数据库连接URL,文件路径,数字和时间段。 如果缺少目录,无法访问数据库,或者您指定了一个非数字值(需要一个数字或一段时间),则应该立即知道,而应用程序已经使用了一段时间。
其次,确保设置了所有必需的参数。 如果需要某个属性,则在未设置该属性的情况下失败,并通过有意义的异常而不是空的NullPointerException失败(例如, throw new IllegalArgumentException("database.url is required")
)。
第三,检查是否仅在配置文件中设置了允许的值。 如果无法识别配置,请立即失败并报告。 这将使您不必花费一整天的时间来尝试找出为什么设置“ request.time uo t”属性无效的原因。 这适用于具有默认值的可选属性,并带有额外的步骤:将新属性添加到允许的属性的预定义列表中,并可能忘记这样做导致异常,但这不会浪费一分钟以上。
最后一个建议的简单实现如下所示:
Properties properties = loadProperties();
for (Object key : properties.keySet()) {
if (!VALID_PROPERTIES.contains(key)) {
throw new IllegalArgumentException("Property " + key +
" is not recognized as a valid property. Maybe a typo?");
}
}
实现第一个比较困难,因为它需要一些逻辑-在通用属性加载机制中,您不知道属性是否是数据库连接URL,文件夹,超时。 因此,您必须在知道每个属性用途的类中进行这些检查。 您的数据库连接处理程序知道如何使用数据库URL,文件存储处理程序知道什么是备份目录,依此类推。 这可以与所需的属性验证结合使用。 在这里,像Typesafe config这样的库可能会派上用场,但并不能解决所有问题。
这不仅对开发有用,而且对于尝试配置其本地服务器的项目的新手来说,也是最重要的–生产,您可以在其中立即发现此版本中是否存在错误配置。
最终,目标是如果所提供的配置有任何问题,则尽早使失败,而不是花费大量的时间来追逐打字错误,缺少值和意外运行的服务。
翻译自: https://www.javacodegeeks.com/2014/10/validate-configuration-on-startup.html