如何存储配置文件的默认值



我目前正在一个服务器程序上工作,我想添加一个配置文件,以便用户可以更改某些项目,如端口,密码等。当文件第一次生成或我需要重新生成它时,我应该如何存储默认值,这让我很困惑。首先,我将它们存储在私有静态final变量中:

private static final int PORT = 12345;

然后改成Enum:

 public Enum ConfigDefaults {
     PORT("port", "12345");
     private final String name;
     private final string value;
     public ConfigDefaults(String name, String value)
     {
         this.name = name;
         this.value = value;
     }
     public String getName()
     {
         return name;
     }
     public String getValue()
     {
         return value;
     }
 }

我目前正在使用枚举,但它对我来说似乎不是最好的方法。您推荐用什么方法来存储文件的默认值?

如果你想静态地定义它们,就像你最初做的那样,你可以把它们放在ListResourceBundle中。

package codemasters;
import java.util.*;
public class Configuration extends ListResourceBundle {
     protected Object[][] getContents() {
         return new Object[][] {
             {"port", 8080}, 
             {"host", "codemasters.com"},
             {"protocol", "http"}
         };
     }
 }
然后你可以使用你的bundle:
public static void main(String[] args){
   ResourceBundle resource = ResourceBundle.getBundle("codemasters.Configuration");
   System.out.println(resource.getObject("port")); //8080
   System.out.println(resource.getString("host")); //codemasters.com
}

你有两个问题需要解决。

  1. 如何存储默认值(当你生成初始配置的东西)
  2. 如何将配置存储在应用程序的外部(例如,在文件中)。

我的首选解决方案如下。

如何存储默认值

作为默认值,我假设它们不会经常更改,因此可以存储在代码中。存储值的方法有很多,我倾向于简单的:

public class DefaultValues
{
    public static final String DEFAULT_VALUE_NAME_BLAMMY = "BLAMMY";
    public static final String DEFAULT_VALUE_NAME_SMASHY = "SMASHY";
    private static final String BLAMMY = "blam";
    private static final String SMASHY = "smash";
    // this map is optional and depends on the required complexity of your
    // defaults
    private static final Map<String, String> constants;
    public DefaultValues()
    {
        Map<String, String> initialMap = new HashMap<String, String>();
        constants.put(DEFAULT_VALUE_NAME_BLAMMY, BLAMMY);
        constants.put(DEFAULT_VALUE_NAME_SMASHY, SMASHY);
        constants = Collections.unmodifiableMap(initialMap);
    }
    // one way to get the default values; client of this class must know the
    // default value names (exposed as publics from this class).
    public String getDefaultValue(final String defaultValueName)
    {
        return constants.get(defaultValueName);
    }
    // another way to get default values; client does not need to know the
    // default value names (no need for the publics if you use only this
    // technique).
    public Map<String, String> getDefaultValues()
    {
        return constants;
    }
}

只在需要知道默认值时实例化一个新的DefaultValues()实例。

如何在应用程序的外部存储配置

我发现存储配置值最简单的方法是使用属性文件。如果您的配置很复杂,您可能需要一些更健壮的东西,比如XML文件。属性在属性JavaDocs中有很好的介绍。对于XML文件,我建议使用简单的SAX解析器。互联网上有很多SAX解析的好例子,试试Google搜索"sax解析器示例"

使用properties文件存储在项目生命周期中可配置和可更改的内容。

properties文件中维护配置数据很容易,每个环境一个。

您可以根据DEV, QA, PROD等环境创建.properties文件的不同副本

相关内容

  • 没有找到相关文章

最新更新