我正在开发java库,它在多个服务器之一上调用HTTP脚本来处理数据。核心功能正常,现在我正在研究配置问题。
库需要服务器的一些信息(URL,用户名,密码等),如果连接失败,它需要获得另一个,直到它得到响应(简单的高可用性)。并且可以存在多组不同的服务器(即,用于标准与高优先级请求)。甚至可以将服务器的顺序随机化以进行负载平衡。在未来,我们可能希望在这种机制中实现某种服务器状态监控。
我必须补充一点,我是java的新手,所以我的想法可能偏向其他语言的解决方案。我的第一个想法是创建用于存储单个服务器配置的类,然后创建一个可迭代的配置管理器(它将返回迭代器迭代服务器配置)和可序列化。这样,库可以获得迭代器并在服务器上进行迭代,直到它获得有效响应(或用完服务器)。我们班级的用户可以使用任何机制来存储他们需要的配置。
我试图实现这个,我遇到了一些问题:
迭代器应该如何访问配置管理器的数据 - 服务器配置本身以及可能与迭代相关的任何其他数据?配置管理员应该#34;渲染"创建迭代器时的某种简单列表?或者迭代器应该访问配置管理器的内部字段吗?或者配置管理器本身应该是迭代器吗?
如果需要使用不可序列化的字段(可能不会发生,但我想做好准备,如果有的话),是否有任何方法可以扩展类的序列化
这是一种可行的方法还是我应该使用任何库(Commons配置或Java属性)?
答案 0 :(得分:1)
对于单个应用程序,HashMap是可序列化的,可以保存到文件中,然后再读取。您不需要保存整个班级,只需要保存HashMap。您的课程仍然可以管理HashMap。
HashMap适用于键值对。 (例如key =" password" and value =" secret")
根据您的描述,您有一组要保存的已知参数,因此在加载HashMap时可以使用键查找值,这很快。你不需要迭代。但是如果需要,你可以迭代HashMap。
要存储多个系统的配置,您可以拥有HashMaps的集合(例如ArrayList)。 ArrayList也是可序列化的,因此您可以将整个列表写入文件并检索它,并且迭代非常简单。
要使用自定义方式对选择进行排序,使用自定义比较器的优先级队列允许这样做。如果你想随机化选择方法,我认为这需要创建引用相同内容的并行优先级队列,但每个队列都有不同的比较器方法,然后随机选择要读取的队列。我正在考虑具有多个索引的数据库表。您有相同的行集,但根据您选择的索引,您可以以不同的方式遍历它们。
如果您考虑使用多个系统共享的配置,您可能希望将配置存储在数据库中,但听起来并非如此。
答案 1 :(得分:1)
我可能有配置服务。
public interface ConfigurationService {
Iterable<Configuration> getAllConfigurations();
Configuration getConfiguration(String id);
void saveConfiguration(Configuration config);
}
然后你可以做任何你喜欢的事情(属性文件,数据库,spring配置,集群,测试等等)。