用java存储配置的序列化最佳实践
我正在开发java库,它在多个服务器之一上调用HTTP脚本来处理数据。核心功能工作正常,现在我正在研究配置问题
库需要一些信息(URL、用户名、密码等)如果连接失败,则需要获得另一个连接,直到得到响应(简单的高可用性)。并且可以有多个不同的服务器集(即,对于标准和高优先级请求)。甚至服务器的顺序也可以随机化以实现负载平衡。将来,我们可能希望在这个机制中实现某种服务器状态监视
我必须补充一点,我是java新手,所以我的想法可能偏向于其他语言的解决方案。我的第一个想法是创建一个用于存储单个服务器配置的类,然后创建一个可iterable(它将返回迭代器迭代服务器配置)和可序列化的配置管理器。这样,库就可以得到迭代器并在服务器上进行迭代,直到得到有效响应(或耗尽服务器)。我们类的用户可以使用任何机制来存储他们需要的配置
我试图实现这一点,但遇到了一些问题:
迭代器应该如何访问configuration manager的数据—服务器配置本身以及与迭代器相关的任何其他数据?在创建迭代器时,配置管理器是否应该“呈现”某种简单的列表?或者迭代器应该访问configuration manager的内部字段吗?或者configurationManager本身应该是迭代器吗
如果类需要使用不可序列化的字段(可能不会发生,但如果发生了,我想做好准备),有没有办法扩展类的序列化
这是一种可行的方法,还是应该使用任何库(Commons配置或Java属性)
# 1 楼答案
我可能会有一个配置服务
然后,您可以在将来做任何您喜欢的事情(属性文件、数据库、spring配置、集群、测试等)
# 2 楼答案
对于单个应用程序,HashMap是可序列化的,可以保存到文件中,然后再读取。您不需要保存整个类,只需要保存HashMap。您的类仍然可以管理HashMap
HashMap在键值对上工作。(例如key=“password”和value=“secret”)
根据您的描述,您有一组要保存的已知参数,因此当您加载HashMap时,您可以使用键查找值,速度很快。您不需要迭代。但如果需要,您可以在HashMap上进行迭代
要存储多个系统的配置,您可以拥有哈希映射的集合(例如ArrayList)。ArrayList还可以序列化,因此您可以将整个列表写入文件并检索它,而且迭代非常简单
为了有一种定制的方式来排序您的选择,一个带有定制比较器的优先级队列允许这样做。如果您想随机选择方法,我认为这需要创建引用相同内容的并行优先级队列,但每个队列使用不同的比较方法,然后随机选择要从中读取的队列。我考虑的是一个具有多个索引的数据库表。您有相同的行集,但根据您选择的索引,您可以以不同的方式遍历它们
如果您正在考虑让多个系统共享一个配置,您可能希望将配置存储在数据库中,但听起来情况并非如此