长的故事简短,我正在制作一个需要几个“配置值”的Java库。当前,我只是在根目录中使用config.properties文件并从中读取,但是我看不到如何与可分发的jar文件一起使用。
我已经考虑过将这些配置值参数与库中类的构造函数进行制作,但是值太多了 - 似乎不是正确的方法。 comenty,我只需要某种方法,即我的库的用户只能使用JAR文件,而且还可以更改几个影响库功能的配置值。如果有任何不同,我正在使用Maven来构建我的项目。
提前感谢
(假设您只是在Javase工作,因为Java EE具有其他配置机制。)
模式是在您的jar中创建一个单顿类,该类别为其他类提供配置。 从JAR中的属性文件中读取默认值。 允许JAR的呼叫者通过将其设置为系统属性来覆盖属性。
在属性类的Java文档中,有一个构造函数可以提供默认和覆盖并获取“ Net”属性。我将您的问题分为两个部分,然后分别回答每个部分。
我已经考虑过将这些配置值参数与库中类的构造函数进行制作,但是值太多了 - 似乎不是正确的方法。
对于我上面引用的问题的一部分,请参阅以下stackoverflow问题的接受答案(由我写):
如何处理概念上的程序上的大量配置参数?comenty,我只需要某种方法,即我的库的用户只能使用JAR文件,而且还可以更改几个影响库功能的配置值。
听起来您的配置文件将包含N
变量,并且用户可能需要自定义这些变量中的2或3个值。如果n相对较小,则可以使用
用户提供了一个配置文件,其中包含所有
N您的库使用了一组默认配置值的“内置”集,我建议您将其放在属性文件中,该文件将您捆绑到库的JAR文件中,然后通过调用变量的值(该文件的位置可以通过系统属性,环境变量或库的构造函数来指定该文件的位置) ;
。java.util.logging
.
如何,如果n很大,那么您可能希望库为配置变量提供和语义:
ClassLoader.getSystemResourceAsStream()
来访问。这为所有N变量提供了默认值。
N变量之间的任何位置。用户指定的配置变量的值用于覆盖内置默认值。
明显地,您需要在库中实现和逻辑,但这实际上只是一个SMOP(简单的编程问题)。也许最简单的方法是迭代用户提供的
ClassLoader.getSystemResourceAsStream()
Properties
对象中。这样,用户指定的值将覆盖默认值。