java - 在java中存储配置的最佳实践

标签 java serialization configuration iterator

我正在开发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/

相关文章:

.net - 用于 memcached .NET 客户端的高效通用序列化程序

java - 修改属性-service.xml

java - 如何在esapi中生成Master Key和MasterSalt

java - 从 Hijri 日期到 Java 中的 Gregorian

javascript - NodeJS : Write a js object to file and do exports

c# - 获取文件的两个标记行之间的所有内容以便反序列化的最佳方法是什么?

PHP - 两个服务器登录 : localhost/localhost:3306 - control user has no access

sql-server - SSIS:请求的 OLE DB 提供程序 SQLNCLI10.1 未注册

java - org.postgresql.util.PSQLException : ERROR : relation does NOT exist PreparedStatement.executeQuery()

java - JComboBox 不显示箭头