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