`
uule
  • 浏览: 6318481 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

系统配置内存缓存SystemConfiguration

 
阅读更多

先从数据库中取配置信息,数据库没有则从properties文件中取。

不用频繁读取数据库。

 

用一个静态的HashMap实现。

/**
 * 系统配置内存缓存
 *
 */
public class SystemConfiguration {

	private static final Logger logger = LoggerFactory.getLogger(SystemConfiguration.class);
	
	/**
	 * sysconfig.properties中配置信息
	 */
	private static Properties sysconfigprop;
	
	/**
	 * SYS_CONFIG表中配置信息
	 */
	private static Map<String, String> sysconfigdb;

	static {
		sysconfigprop = new Properties();
		try {
			sysconfigprop.load(SystemConfiguration.class.getClassLoader()
					.getResourceAsStream("sysconfig.properties"));
		} catch (IOException e) {
			logger.error("load sysconfig.properties failed...");
			e.printStackTrace();
		}
		loadDatabase();
	}
	
	/**
	 * 加载数据库中配置项
	 * com.vispractice.soa.lightesb.common.listener.EsbInitListener中调用
	 * 
	 */
	private static void loadDatabase() {
		logger.debug("loadDatabase begin...");
		
		sysconfigdb = new HashMap<String, String>();
		// 获取spring bean容器
		WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
		ISysConfigDao sysconfigdao = (ISysConfigDao) wac.getBean("iSysConfigDao");
		List<SysConfig> config = sysconfigdao.getAll();
		
		logger.debug("config [db] list :");
		
		for(SysConfig c : config){
			if(Constants.ENABLED_FLAG_Y.equals(c.getEnabledFlag())){
				logger.debug(c.toString());
				
				sysconfigdb.put(c.getConfigName(), c.getConfigValue());
			}
		}
		logger.debug("loadDatabase end...");
	}

	/**
	 * 获取配置值
	 * 如果有相同配置项,数据库中配置项优先级更高
	 * 
	 * @param name
	 * @return
	 */
	public static String getConfigByName(String name) {
		String config = sysconfigdb.get(name);
		if(config == null){
			config = sysconfigprop.getProperty(name);
			
			logger.debug("this config from properties... " + name + "=" + config);
		}
		return config;
	}
	
	/**
	 * 添加新属性到缓存
	 * 
	 * @param config
	 */
	public static void addOrUpdateToSysConfigDb(Map<String, String> config){
		logger.debug("addOrUpdateToSysConfigDb : " + config);
		
		// 同步
		synchronized (sysconfigdb){
			sysconfigdb.putAll(config);
		}
		
		logger.debug("sysconfigdb : " + sysconfigdb);
	}
	
	/**
	 * 从缓存中删除属性
	 * 
	 * @param configName
	 */
	public static void removeFromSysConfigDb(List<String> configName){
		logger.debug("removeFromSysConfigDb : " + configName);
		
		// 同步
		synchronized (sysconfigdb){
			for(String c : configName){
				sysconfigdb.remove(c);
			}
		}
		
		logger.debug("sysconfigdb : " + sysconfigdb);
	}
	
}

 

调用:

String serverHome = SystemConfiguration.getConfigByName(Constants.MIDDLEWARE_HOME); //serverHome
String proxyBuildPath = SystemConfiguration.getConfigByName(Constants.SRV_PKG_PATH); //proxyBuildPath
String address = SystemConfiguration.getConfigByName(Constants.SERVER_ADDRESS);

 。。

 

 例子2:

(将各种开关也放到缓存中,不用在使用时再查询)

import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 全局配置
 *
 */
public class SysConfigCache {

	private static final Logger logger = LoggerFactory.getLogger(SysConfigCache.class);
	/**
	 * sysconfig.properties中配置信息
	 */
	private static Properties sysconfigprop;
	/**
	 * SYS_CONFIG表中配置信息
	 */
	private static Map<String, String> sysconfigdb = new Hashtable<String, String>();
	/**
	 * 全局日志开关
	 */
	private static boolean logSwitch = true;
	
	private static boolean inited = false;
	
	private static boolean parameterCheck = true;
	
	private static boolean serviceAccess = false;

	public final static String LOG_SWITCH="log.switch";
	public final static String SRV_PARAMETER_CHECK_ACCESS="SRV_PARAMETER_CHECK_ACCESS";
	public final static String SERVICE_ACCESS = "SERVICE_ACCESS";
	
	static {
		sysconfigprop = new Properties();
		try {
			InputStream in = SysConfigCache.class.getClassLoader().getResourceAsStream("sysconfig.properties");
			if(in!=null){
				sysconfigprop.load(in);
				setProperty(LOG_SWITCH,sysconfigprop.getProperty(LOG_SWITCH));
				inited = true;
			}else{
				logger.error("failed to found sysconfig.properties file ");
			}
			
		} catch (IOException e) {
			logger.error("load sysconfig.properties failed...",e);
		}
	}
	
	/**
	 * 添加配置项
	 * @param key
	 * @param value
	 */
	public static void putSysConfigDB(String key,String value){
		if(sysconfigdb!=null){
			logger.debug("put ["+key+":"+value+"] into SysConfigCache.");
			sysconfigdb.put(key, value);
			setProperty(key,value);
		}
	}
	
	/**
	 * 获取配置值
	 * 如果有相同配置项,数据库中配置项优先级更高
	 * 
	 * @param name
	 * @return
	 */
	public static String getConfigByName(String name) {
		String config = sysconfigdb.get(name);
		if(config == null){
			config = sysconfigprop.getProperty(name);
			logger.debug("this config from properties... " + name + "=" + config);
		}
		return config;
	}
	
	/**
	 * 从缓存中删除属性
	 * 
	 * @param configName
	 */
	public static void removeFromSysConfigDb(List<String> configName){
		logger.debug("removeFromSysConfigDb : " + configName);
		// 同步
		synchronized (sysconfigdb){
			for(String c : configName){
				logger.debug("remove ["+c+"] from SysConfigCache.");
				sysconfigdb.remove(c);
				setProperty(c,null);
			}
		}
		logger.debug("sysconfigdb : " + sysconfigdb);
	}
	
	/**
	 * 从缓存中删除属性
	 * 
	 * @param configName
	 */
	public static void removeFromSysConfigDb(String configName){
		logger.debug("remove ["+configName+"] from SysConfigCache.");
		// 同步
		synchronized (sysconfigdb){
				sysconfigdb.remove(configName);
				setProperty(configName,null);
		}
		logger.debug("sysconfigdb : " + sysconfigdb);
	}
	
	private static void setProperty(String key,String value){
		if(SysConfigCache.LOG_SWITCH.equals(key)){
			SysConfigCache.setLogSwitch("1".equals(SysConfigCache.getConfigByName(SysConfigCache.LOG_SWITCH)));
		}
		if(SysConfigCache.SRV_PARAMETER_CHECK_ACCESS.equals(key)){
			SysConfigCache.setParameterCheck("1".equals(SysConfigCache.getConfigByName(SysConfigCache.SRV_PARAMETER_CHECK_ACCESS)));
		}
		
		if(SysConfigCache.SERVICE_ACCESS.equals(key)){
			SysConfigCache.setServiceAccess("1".equals(SysConfigCache.getConfigByName(SysConfigCache.SERVICE_ACCESS)));
		}
	}
	

	public static boolean isLogSwitch() {
		return logSwitch;
	}

	public static void setLogSwitch(boolean logSwitch) {
		SysConfigCache.logSwitch = logSwitch;
	}

	public static boolean isInited() {
		return inited;
	}

	public static void setInited(boolean inited) {
		SysConfigCache.inited = inited;
	}

	public static boolean isParameterCheck() {
		return parameterCheck;
	}

	public static void setParameterCheck(boolean parameterCheck) {
		SysConfigCache.parameterCheck = parameterCheck;
	}

	public static boolean isServiceAccess() {
		return serviceAccess;
	}

	public static void setServiceAccess(boolean serviceAccess) {
		SysConfigCache.serviceAccess = serviceAccess;
	}
	
}

 

 例子3:

简单Cache

import java.util.HashMap;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 参数校验缓存类
 *
 */
public class ServiceDataCache {

	private static final Logger logger = LoggerFactory.getLogger(ServiceDataCache.class);
	private static HashMap<String,List> cache = new HashMap<String,List>();
	public static boolean checkAccess = false;

	/**
	 * 填充缓存
	 * @param serviceNameEn
	 * @param paramsList
	 */
	public static void setCache(String serviceNameEn, List paramsList){
		logger.info("set Data to Cache begin..");
		if(cache != null){
			if(!cache.containsKey(serviceNameEn)){
				cache.put(serviceNameEn, paramsList);			
			}
		}	
		
		logger.info("set Data to Cache end.");
	}
	
	
	/**
	 * 从缓存取数据
	 * @param serviceNameEn
	 * @return
	 */
	public static List GetCache(String serviceNameEn){
		logger.info("Get Data from Cache begin.");
		if(cache != null){
			if(cache.containsKey(serviceNameEn)){
				return cache.get(serviceNameEn);				
			}
			
		}
		return null;
	}
	
	
	/**
	 * 校验缓存中是否存在
	 * @param serviceNameEn
	 * @return
	 */
	public static boolean checkCacheExist(String serviceNameEn){
		logger.info("check Cache Exist begin.");
		if(cache != null){
			return cache.containsKey(serviceNameEn.trim());			
		}
		return false;
	}
}

 

 

。。

 

分享到:
评论

相关推荐

    DELL服务器系统提示错误解决的若干办法.docx

    * 解决方法:检查电源设备是否支持系统组件,降低系统配置,确保电源设备能够满足系统需求。 Node Interleaving disabled! Memory configuration does not support Node Interleaving * 原因:内存配置不支持节点...

    DELL-服务器系统提示错误解决的若干办法.doc

    检查电源设备是否支持处理器、内存模块和扩充卡的系统配置。 3. Alert! Node Interleaving disabled! Memory configuration does not support Node Interleaving. 解决方法:检查内存模块是否安装在支持节点交叉的...

    如何安装惠普笔记本电脑系统.docx

    * System Memory:设置系统内存 * Video Controller:设置视频控制器 * Panel Type:设置液晶屏型号 * Audio Controller:设置音频控制器 * Modem Controller:设置调制解调器 * Primary Hard Drive:设置主硬盘 * ...

    bios的设置,,,,,

    Installed System Memory 系统内存:该选项显示系统中所装内存的大小及型号 System Memory Speed 内存速率:该选项显示所装内存的速率 USB Emulation USB仿真:使用该选项可以在不直接支持USB的操作系统中使用...

    BIOS中英文对照表

    Installed System Memory 系统内存:该选项显示系统中所装内存的大小及型号 System Memory Speed 内存速率:该选项显示所装内存的速率 System Memory Channel Mode 内存信道模式:该选项显示内存槽设置。 AGP ...

    198个电脑精华解决方案

     Installed System Memory 系统内存:该选项显示系统中所装内存的大小及型号  System Memory Speed 内存速率:该选项显示所装内存的速率  System Memory Channel Mode 内存信道模式:该选项显示内存槽设置。 ...

    DOS三个基本启动文件COMMAND.COM MS-DOS.SYS IO.SYS DOS引导文件Boot.rar sys.com

     在Win 9X中,MSDOS.SYS变成了纯文本系统配置文件,用于控制Win的启动方式。可以在DOS模式下解除其特殊属性(只读、隐藏、系统),根据需要自行配置。MSDOS.SYS可以是空文件,甚至可以删除,当然此时系统只能以纯DOS...

    544041_Broadwell_DE_EDS_Registers_Vol2_544041_v1_0.pdf

    * 配置寄存器(Configuration Registers):用于存储系统配置信息。 寄存器访问 寄存器访问是指访问寄存器的操作,可以是读操作或写操作。Broadwell-DE SoC 提供了多种寄存器访问方式,包括: * 读寄存器(Read ...

    图解戴尔台式机BIOS设置.doc

    通过本文,我们将详细介绍戴尔台式机BIOS设置的各个方面,包括如何恢复BIOS设置为默认值、IDE设备配置、硬盘启动顺序设置、内存信息、AGP孔径设置、CPU信息等。 一、恢复BIOS设置为默认值 有时,当我们不小心更改...

    计算机应用技术(实用手册)

    这个项目可指定让AGP装置来使用的系统内存大小,这取用大小是PCI内存地址范围的一部份,可分配给图形内存的空间。 Init Display First: 这个项目可选择当系统开机时先行对AGP或是PCI插槽来做初始化的动作。 [AGP...

    Oracle数据库管理员技术指南

    1.6.5 怎样利用 Database Configuration Assistant 创建数据库 1.7 完成数据库配置 1.7.1 创建表空间 1.7.2 执行数据字典配置脚本 1.7.3 建立另外的回退段 1.7.4 修改 SYSTEM 用户的缺省和临时 表空间 ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和...

    oracle10g课堂练习I(1)

    服务器进程和数据库缓冲区高速缓存 1-14 物理数据库结构 1-15 表空间和数据文件 1-17 SYSTEM 和 SYSAUX 表空间 1-18 段、区和块 1-19 逻辑和物理数据库结构 1-20 课程示例: HR 方案 1-22 数据库体系结构:...

    Oracle DBA workshop1 (中文版)

    Oracle 内存结构1-10 进程结构1-12 Oracle 实例管理1-13 服务器进程和数据库缓冲区高速缓存1-14 物理数据库结构1-15 表空间和数据文件1-17 SYSTEM 和SYSAUX 表空间1-18 段、区和块1-19 逻辑和物理数据库结构1-20 ...

    oracle10g课堂练习I(2)

    服务器进程和数据库缓冲区高速缓存 1-14 物理数据库结构 1-15 表空间和数据文件 1-17 SYSTEM 和 SYSAUX 表空间 1-18 段、区和块 1-19 逻辑和物理数据库结构 1-20 课程示例: HR 方案 1-22 数据库体系结构:...

    linux.chm文档

    cat /proc/meminfo 校验内存使用 cat /proc/swaps 显示哪些swap被使用 cat /proc/version 显示内核的版本 cat /proc/net/dev 显示网络适配器及统计 cat /proc/mounts 显示已加载的文件系统 lspci -tv 罗列 PCI ...

    oracle数据库dba管理手册

    3.2.1 起点:SYSTEM表空间 47 3.2.2 分离应用程序数据段:DATA 48 3.2.3 分离应用程序索引段:INDEXES 48 3.2.4 分离工具段:TOOLS 49 3.2.5 分离回滚段:RBS 50 3.2.6 分离临时段:TEMP 50 3.2.7 分离用户:USERS ...

    understanding linux network internals

    Part II: System Initialization 系统初始化 Chapter 4. Notification Chains (消息)通知链 Section 4.1. Reasons for Notification Chains 通知链的原因 Section 4.2. Overview 简介 Section 4.3. Defining a ...

Global site tag (gtag.js) - Google Analytics