对静态文件持久化的第二种解决方案

 

说明

把配置信息,存储在配置的Bean中,再把Bean以集合的形式存储于Map当中,再将Map转成Json字符串,存储于集合当中。

 

配置工具类

配置工具类,用于获得配置信息存储配置信息

 

ConfigUtil.java

package com.vvvv.musicsns.util;

 

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;

import com.vvvv.musicsns.bean.ConfigBean;

import com.vvvv.musicsns.config.FinalConfig;

import org.apache.commons.lang3.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

import java.io.File;

import java.lang.reflect.Type;

import java.util.HashMap;

import java.util.Map;

 

/**

* config util 配置工具类

* User: luowei

* Date: 12-7-8

* Time: 下午5:54

*/

public class ConfigUtil {

/**

* 记录器

*/

protected static Logger logger = (Logger) LoggerFactory.getLogger(ConfigUtil.class);

 

/**

* ConfigUtil实例

*/

private static ConfigUtil configUtil = null;

 

/**

* config json string,converted from Map<String,ConfigBean<T>>

*/

private String configJson =null;

 

/**

* 配置工具类的map

*/

private Map<String,ConfigBean> configBeanMap = new HashMap<String, ConfigBean>();

 

/**

* 构造方法

* @param configJson json字符串

*/

private ConfigUtil(String configJson){

this.configJson = configJson;

}

 

/**

* 拿配置文件路径

* @return 返回路径

*/

public static String getConfigFilePath(){

String configFilePath = FinalConfig.class.getResource(FinalConfig.CONFIG_JSONFILE_NAME).getPath().substring(1);

// 判断系统 linuxwindows

if ("\\".equals(File.separator)){

configFilePath = configFilePath.replace("%20" , " ");

}else if ( "/".equals(File.separator)){

configFilePath = "/"+ configFilePath.replace("%20" , " ");

}

return configFilePath;

}

 

/**

* get configJson string , sington

* @return 配置的json字符串

*/

public static String getConfigJson() {

return configUtil.configJson;

}

 

/**

* set configJson string to config file

* @param configJson 配置的json字符串

* @return 成功或失败

*/

public static Boolean setConfigJson(String configJson) {

String filePath = getConfigFilePath();

if(configUtil==null){

configUtil = initConfigUtil();

}

configUtil.configJson = configJson;

Boolean flag = FileUtil.writeString2File(filePath, configJson);

return flag;

}

 

/**

* get config bean Map<String,ConfigBean<T>> ,such as: <configBean.getKey(),configBean>

* @return 配置信息map

*/

public static Map<String,ConfigBean> getConfigMap(){

if(null == configUtil){

initConfigUtil();

}

String configStr = ConfigUtil.getConfigJson();

if(StringUtils.isNotBlank(configStr)){

Gson gson = new Gson();

Type configBeanType = new TypeToken<Map<String,ConfigBean>>(){}.getType();

configUtil.configBeanMap = gson.fromJson(configStr,configBeanType);

}

return configUtil.configBeanMap;

}

 

/**

* set configBeanMap to config file

* @param configBeanMap ConfigBeanmap

* @return 成功或失败

*/

public static Boolean setConfigMap(Map<String,ConfigBean> configBeanMap){

if(null == configUtil){

initConfigUtil();

}

Gson gson = new Gson();

String configStr = gson.toJson(configBeanMap);

configUtil.configBeanMap = configBeanMap;

Boolean flag = ConfigUtil.setConfigJson(configStr);

return flag;

}

 

/**

* init configUtil instance

* @return 配置实例

*/

private static synchronized ConfigUtil initConfigUtil(){

//if(configUtil==null){

String configFilePath = getConfigFilePath();

String jsonStr = FileUtil.readStringFromFile(configFilePath);

configUtil = new ConfigUtil(jsonStr);

// }

return configUtil;

}

 

/**

* destroy configUtil instance

*/

public static synchronized void destroy(){

if(configUtil !=null){

configUtil=null;

}

}

}

 

配置名称标识

配置的名称标识,标识了配置的名称,用于程序拿出指定的名称的配置。

 

FinalConfig.java

package com.vvvv.musicsns.config;

 

/**

* the config properties defined in this class

* User: luowei

* Date: 12-7-8

* Time: 下午1:08

*/

public class FinalConfig {

 

public static String AAAAA = "aaaaa";

public static String BBBBB = "bbbbb";

public static String CCCCC = "ccccc";

}

 

配置Bean

 

ConfigBean.java

package com.vvvv.musicsns.bean;

 

import java.io.Serializable;

 

/**

* config bean ,to store config info

* User: luowei

* Date: 12-7-8

* Time: 下午1:13

*/

public class ConfigBean implements Serializable {

 

/**

* 配置名称

*/

protected String name;

 

/**

* key

*/

protected String key;

/**

* value

*/

protected String value;

/**

* 描述信息

*/

protected String describe;

 

…………getset方法…………

}

 

使用

config.json

{

"aaaaa":

{"key":"aaaaa","name":"域名","value":"http://aa.com/aaaa","describe":"音乐社区域名,外网:http://aa.vvvv.com"},

    "bbbbb":

    {"key":"bbbbb","name":"域名","value":"http://aa.com/aaaa","describe":"音乐社区域名,外网:http://aa.vvvv.com"},

"ccccc":

    {"key":"ccccc","name":"域名","value":"http://aa.com/aaaa","describe":"音乐社区域名,外网:http://aa.vvvv.com"}

}

 

posted @ 2012-07-30 20:13  维唯为为  阅读(333)  评论(0编辑  收藏  举报