我正在研究在支持层次结构和动态加载的同时存储应用程序配置数据的最佳方法是什么。
数据示例:
层次结构意味着:
我的州有多个区域,因此会有默认配置,但状态可以覆盖默认配置的部分(或全部),而分区可以覆盖部分状态配置。
动态加载表示:
无需重启服务器甚至用户登录即可动态加载和应用新配置。
配置存储格式(可以是文件或数据库):
您对此主题有何看法?
谢谢!
答案 0 :(得分:2)
很久以前我写过类似的东西。它不是分层的。它依赖于每个具有唯一合理名称的组件。这是在XML和JSON很时髦之前,所以我只使用了Properties。
基本上,你从顶部窗口开始,看看它的所有组件,并根据它的类型(很多instanceofs)调用一个方法(现在你给它一个更像“Marshaller”的更好的名字:-) )写出用户可能更改并想要恢复的相关信息。递归申请。你会得到类似的东西:
MainFrame.background=#FFFFFF
MainFrame.bounds=200,100,400,500
...
MainFrame.Divider.x=122
...
MainFrame.DataPanel.DataTable.Columns.1.x=423
MainFrame.DataPanel.DataTable.Columns.1.width=22
MainFrame.DataPanel.DataTable.Columns.1.sortedby=Name
你可能会把它变成层次结构,但现在使用XML或JSON可能更好。但基本概念可能适用。您可以使用DIP或其他东西来确定正确的Marshaller。
也许这会给你一些想法。也许没有标准的方法。我很惊讶没有人回答“哦,是的,使用Apache或Guava或JGoodies等”。
答案 1 :(得分:0)
好吧,总有Java Preferences API。然后你不必担心这些事情。
附录:
受欢迎程度(或缺乏程度)可能源于这样一个事实,即开箱即用,首选项在整个系统或用户中是全局的。因此,应用程序等需要在Preferences树中创建自己的命名空间。人们更习惯于每个具有自己的属性文件并从那里开始的实例。
对于更复杂的结构,Preferences API是一种树结构,就像XML DOM一样。您找到了树中的节点,并在这些节点下方工作。因此,您可以在该表示之上对结构化数据进行分层。
API很老,就像java logging API一样旧。但是这个设计非常基础和有用,因此没有太多要求更新它。收藏框架也很陈旧,但我们每天都很开心(大部分)。
答案 2 :(得分:0)