先从数据库中取配置信息,数据库没有则从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; } }
。。
相关推荐
在C#代码中,可以通过System.Configuration命名空间提供的ConfigurationManager类来读取这些配置信息。例如: ```csharp string ip = ConfigurationManager.AppSettings["IP"]; string port = ConfigurationManager...
当数据库中的特定表或特定行发生更改时,系统会自动清除与之关联的缓存,确保应用程序获取到最新的数据。 在创建Sql缓存依赖示例时,首先需要设置数据库环境。你需要在SQL Server中创建一个启用触发器的表,这个...
`HttpRuntimeCache`是.NET Framework中内置的内存缓存,它基于System.Web命名空间下的HttpRuntime类。这个缓存适用于小型应用或者在不支持分布式缓存的环境下。使用HttpRuntimeCache,我们可以方便地将数据存储在Web...
- **内存存储**:这是最基础的缓存方式,将数据存储在应用程序的内存中,提供快速的访问速度,但数据不会持久化,重启应用程序后数据会丢失。 - **独立存储(Isolated Storage)**:数据被存储在本地磁盘的隔离...
在Java中,最常用的缓存库之一是Ehcache,它是一个开放源码的、高性能的、内存缓存解决方案。要创建一个简单的Ehcache实例,你需要在项目中引入Ehcache的依赖,并配置一个cache manager和具体的缓存实例: ```xml ...
* 解决方法:检查电源设备是否支持系统组件,降低系统配置,确保电源设备能够满足系统需求。 Node Interleaving disabled! Memory configuration does not support Node Interleaving * 原因:内存配置不支持节点...
检查电源设备是否支持处理器、内存模块和扩充卡的系统配置。 3. Alert! Node Interleaving disabled! Memory configuration does not support Node Interleaving. 解决方法:检查内存模块是否安装在支持节点交叉的...
本文将详细解析CONFIG.SYS的功能和用法,帮助读者理解其在系统配置中的核心地位。 CONFIG.SYS,全称Configuration System,是DOS系统中的一个初始化配置文件。它的主要任务是在系统启动时加载设备驱动程序和服务,...
Windows Server AppFabric缓存是微软提供的一个分布式内存对象缓存解决方案,专为提升.NET应用程序,特别是ASP.NET应用程序的性能而设计。它与开源的Memcached类似,但提供了更丰富的管理和扩展能力。在本文中,我们...
在高级设置中,用户可以进行更深入的系统配置: 1. **Multiprocessor Specification**:多重处理器规范,这是针对多处理器系统的设置,如选择MPS的1.4版本,可以支持更多的PCI总线和未来的升级,适用于多核CPU的...
- Memory Cache:启用或禁用内存缓存,开启能提升系统速度,但可能会增加功耗。 - Cache System BIOS Area:控制BIOS区域的缓存,Write Protect设置为默认的忽略写入/储存设定。 - Cache Video BIOS Area:控制...
RCW(Reset Configuration Word)通常用于设置和初始化一些高级的硬件特性,比如在某些SoC(System on Chip)中,RCW可能会用来配置内存控制器的初始状态,包括内存映射、时序参数等。由于非MX核心的内存控制器不...
“---System Configuration Dialog---”指示符后的内容,表明了设备在启动时会提供一个系统配置对话框,用户可以选择是否继续进行配置。这是一个重要的初始化步骤,允许管理员设置基本的网络参数,如IP地址、子网...
5. **系统配置(System Configuration)**:AADL允许用户定义系统级别的布局,包括组件的物理位置、连接关系以及执行环境。 6. **属性(Properties)**:AADL支持对组件和系统的性能属性进行量化描述,如带宽、时延...
本章节旨在介绍一系列可用于诊断和确定系统配置、开发以及性能问题的工具。这些工具不仅有助于理解系统的当前状态,还能帮助用户解决可能出现的问题。在本书后续部分,我们将利用其中的一些工具来分析特定的情况。 ...
在BIOS中,找到“System Configuration”(系统配置)选项,然后找到“SATA Native Support”(SATA原生支持)属性,并将其设置为“Disabled”(禁用)。这样做的原因是禁用SATA原生支持可以使安装程序识别到硬盘,...
BIOS(Basic Input/Output System,基本输入/输出系统)是一种固件,存储在计算机主板上的ROM(Read-Only Memory, فقط读存储器)中,负责管理计算机的硬件组件,并提供基本输入/输出操作。BIOS Setup Utility是...
Ehcache支持在内存和磁盘上存储数据,并且可以配置为分布式缓存,以适应大型分布式系统的需求。由于Ehcache的高效性和易用性,它成为了许多Java开发者在构建高性能应用程序时的首选缓存库。 **Ehcache在Maven项目中...
4. **Filesystem configuration(不同文件系统的配置参数)**: 这些参数涉及到文件系统的类型、挂载点、权限等,如`MAXMOUNTS`定义最大挂载点数量,`SWAPSPACE`设置交换分区大小等。 5. **Virtual Disks(虚拟...