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

时间:2014-05-07 19:15:14

标签: java enums config

我目前正在研究一个服务器程序,我想添加一个配置文件,以便用户可以更改某些项目,如端口,密码等。我很难理解我应该如何存储默认值文件首先生成或我需要重新生成它。首先,我将它们存储在私有静态最终变量中:

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;
     }
 }

我目前正在使用Enum,但它似乎对我来说不是最好的方式。作为存储文件默认值的方法,您会建议什么?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

如果你想像以前那样静态地定义它们,可以将它们放在ListResourceBundle中。

package codemasters;

import java.util.*;

public class Configuration extends ListResourceBundle {
     protected Object[][] getContents() {
         return new Object[][] {
             {"port", 8080}, 
             {"host", "codemasters.com"},
             {"protocol", "http"}
         };
     }
 }

然后你可以使用你的包:

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
}

答案 2 :(得分:0)

您需要解决两个问题。

  1. 如何存储默认值(用于生成初始配置内容时)。
  2. 如何在应用程序外部存储配置(例如,在文件中)。
  3. 我的首选解决方案如下。

    如何存储默认值

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

    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文件一样更健壮的东西。 Properties JavaDocs涵盖了属性。 对于XML文件, 我建议一个简单的SAX解析器。 在互联网上有很多很好的SAX解析例子, 尝试谷歌搜索&#34;萨克斯解析器示例&#34;。