Java属性:最佳实践?

时间:2015-01-20 17:01:47

标签: java application-settings properties-file

场景:应用程序具有可以启用某些优化的算法。默认情况下有些是打开的,有些是关闭的。有没有一种方便的方法在Java中实现某种全局属性系统?

要求:

  • 必须很容易两个运行多个程序的不同设置实例
  • 可从每个班级访问(如果可能,不传递任何对象)
  • 可通过命令行参数设置,例如-DenableOptimizationX
  • “标准”方式/易于用户理解

备选方案:

这些(或其他)中的哪一个似乎是这种情况的最佳解决方案?

1 个答案:

答案 0 :(得分:2)

  1. 将属性保存在.prop文件中。我认为这比命令行参数更好,因为
  2.   
        
    1. 可以轻松查看所有属性的使用情况。
    2.   
    3. 他们当前的价值是什么,
    4.   
    5. 每个部署环境都可以拥有自己的属性值(例如,qa,prod)
    6.   
    7. 您可以在不同文件中对属性进行逻辑分组。
    8.   
    1. 创建一个类PropertyFactory。拥有私有静态最终成员propertiesMap。在静态块中的此类中,使用来自所有属性文件的值初始化propertiesMap。 您现在可以从代码中的任何位置使用propertiesMap
    2. 为了方便最终用户,您可以为用户提供一个选项,以在命令行参数中指定属性值。在你的静态块中,处理它。如果用户为某些属性提供了值,则在地图中覆盖。
    3. 您可以将其作为

      进行访问 。

      PropertiesFactory.getPropertiesMap()得到( “钥匙”);

    4. 更新

      1. 您希望在运行时更改值。但这与vm arguments / command line arguments / system enviornments不可能。程序执行开始后,这些值将被修复。所以这在独立的java应用程序中是不可能的。
      2. 如果您希望值能够更新,那么propertiesMap需要是可变的。您需要在服务器上运行此程序,其中维护propertiesMap的实例,并且当您想要覆盖其中一个键的值时,可以将方法放在此映射上。