Java属性:最佳做法?

问题描述 投票:1回答:1

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

要求:

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

备择方案:

  • 内置的全局属性 ,例如-DenableOptimizationX=trueSystem.getProperty("foo.bar.enableOptimizationX")
  • 内置属性文件
  • 环境变量 System.getenv("enableOptimizationX")
  • 具有静态变量的类
  • 包含设置并通过设置文件/参数传递的实例
  • ...?

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

java application-settings properties-file
1个回答
2
投票
  1. 将属性保留在.prop文件中。 我认为这比命令行参数更好,因为
  1. 它使您可以轻松查看正在使用的所有属性。
  2. 他们目前的价值是多少
  3. 每个部署环境可以具有自己的属性值(例如,qa,prod)
  4. 您可以在逻辑上将不同文件中的属性分组。
  1. 创建一个类PropertyFactory。 有一个私有的静态最终成员propertiesMap 在此类的静态块中,使用所有属性文件中的值来初始化propertiesMap 您现在可以在代码中的任何位置使用propertiesMap
  2. 为了使最终用户容易使用,您可以为用户提供更多选项,以在命令行参数中指定属性值。 然后在您的静态块中进行处理。 如果用户为某些属性提供了值,则覆盖地图。
  3. 您可以通过以下方式访问它

    PropertiesFactory.getPropertiesMap()。get(“ key”);

更新资料

  1. 您希望在运行时更改值。 但这对于vm参数/命令行参数/系统环境是不可能的。 一旦程序开始执行,这些值将被固定。 因此,这在独立的Java应用程序中是不可能的。

如果您希望值具有可更新性,那么propertiesMap需要是可变的。 您将需要在服务器上运行该程序,并在该服务器上维护propertiesMap的实例,并且在要覆盖其键之一的值时可以在该图上放置方法。

© www.soinside.com 2019 - 2024. All rights reserved.