package com.huawei.support.cache.impl;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.huawei.support.exception.ApplicationException;
/**
* 从cacheConfig.xml中读取配置文件.
*/
public final class CacheConfigReader
{
/**
* sLog
*/
private static Log sLog = LogFactory.getLog(CacheConfigReader.class);
/**
* 本实例
*/
private static CacheConfigReader sInstance;
/**
* 最终修改时间
*/
private static long sLastModified = -1;
/**
* 缓存服务器列表
*/
private static String[] sServerList;
/**
* 默认Keyspace
*/
private static String sDefaultKeyspace;
/**
* 默认ColumnFamily
*/
private static String sDefaultColumnFamily;
/**
* DataBinding Map
*/
private static Map<String, String> sDataBindingMap =
new HashMap<String, String>();
/** 默认构造函数.
* @param aConfigFile 配置文件名
* @throws ApplicationException ApplicationException
*/
private CacheConfigReader(String aConfigFile)
throws ApplicationException
{
try
{
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(aConfigFile);
XPathFactory pathFactory = XPathFactory.newInstance();
XPath xpath = pathFactory.newXPath();
// 解析缓存服务器列表.
sServerList = readServerList(xpath, doc);
// 解析默认Keyspace.
sDefaultKeyspace = readDefaultKeyspace(xpath, doc);
// 解析默认ColumnFamily
sDefaultColumnFamily = readDefaultColumnFamily(xpath, doc);
// 解析DataBindings.
sDataBindingMap = readDataBindingMap(xpath, doc);
}
catch (ParserConfigurationException e)
{
sLog.error(e);
throw new ApplicationException(e);
}
catch (XPathExpressionException e)
{
sLog.error(e);
throw new ApplicationException(e);
}
catch (IOException e)
{
sLog.error(e);
throw new ApplicationException(e);
}
catch (SAXException e)
{
sLog.error(e);
throw new ApplicationException(e);
}
}
/** 获取本实例.
*
* @return CacheConfigReader cache配置文件读取实例
* @throws ApplicationException [参数说明]
*/
public static CacheConfigReader getInstance() throws ApplicationException
{
// 从classpath中读取配置文件
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("cacheConfig.xml");
File configFile = new File(url.getFile());
// 实例为null或者配置文件被修改则重新读取配置文件
if ((null == sInstance) || (sLastModified != configFile.lastModified()))
{
sInstance = new CacheConfigReader(url.getFile());
// 设置最终修改时间
sLastModified = configFile.lastModified();
}
return sInstance;
}
}
分享到:
相关推荐
Cassandra 的安装需要配置 Java 环境变量、Cassandra 的安装路径、日志存放地址、数据文件存放目录、提交日志文件存放目录、缓存文件存放目录、内存大小和 CPU 核心数设置等参数。只有正确地配置这些参数,Cassandra...
Cassandra 节点工具扩展...整数数据中心集群机架名称信息使用的堆内存 (MB) 整数数据中心集群机架名称信息分配的堆内存 (MB) 整数数据中心集群机架名称信息例外整数数据中心集群机架名称信息密钥缓存大小整数数据中
cassandra-nginx-cdn 一些配置文件... 这种方法将是最有效的,因为它将避免在每个请求上重新创建集群变量,并将直接在Lua区域中保留负载平衡策略和已准备好的语句的缓存状态。 openresty-> Nginx的配置脚本->将UDP MPEG
数据目录是/cassandra , commitlog 目录是/commitlog ,缓存目录是/caches ,它们都暴露为要链接到主机目录的卷。 可以设置这些环境变量来自定义集群: CLUSTER_NAME如果未设置,则默认为“TestCluster”。 ...
旨在与 KairosDB 一起使用以减轻 Kairos/Cassandra 的负载。 缓存来自 POST 请求的响应正文 5 分钟,从相同请求的缓存中返回正文。 ###用法: ./postcache -b 'kairosdb.example....
该角色使用用于生成模板和制定安装决策的属性更新Ansible缓存。 要求 该角色使用清单组来确定Cassandra角色的区域。 对于Cassandra环,必须至少定义一个库存组。 这是通过清单文件中声明的[dc-1-ds]来完成的。 清单...
SpringBoot2.0 + NoSQL使用教程,项目名称:“ SpringBoot2NoSQL” 项目介绍 一站式SpringBoot for ...重点介绍Redis,MongoDB,ElasticSeach,Cassandra模型数据库,因为它们是各自领域的领先者(分别是KV缓存,文
Apache Cassandra是一套开源分布式Key-Value存储系统
缓存连接通过一致的键值对缓存接口将应用程序绑定到多个支持数据存储,例如 RDBMS、NoSQL 存储(例如:Cassandra、HBase)和流(例如:JMS、Kafka) 文档 EhCacheConnection 的特性和用法的详细文档可以在找到
使用Qt作为基本框架的Apache Cassandra分布式数据库系统的C ++包装器库。 提供类似于语法的C ++数组,以快速在数据库中读写。 善于思考和快速的面向对象的库(即缓存)。
Memtable基本上是可以通过键查找的数据行的回写高速缓存,也就是说,与直写式高速缓存不同,Memtable中的写操作会在Memtable中进行批量处理,直到刷新为止。冲洗将Memtable转换为SSTable的过程称为刷新。 您可以...
第一章:jvm、第二章:java集合、第三章:java多线程...加密算法、第二十三章:分布式缓存、第二十四章:Hadoop、第二十五章:Spark、第二十六章:Storm、第二十七章:YARN、第二十八章:机器学习、第二十九章:云计算
1.JVM 2.集合 3.多线程并发 4.java基础 5.spring原理 6.微服务 7.netty与rpc 及实现 8.网络 9.zookeeper 10.kafka 11.rabbitmq 12.hbase 13.mongodb 14.cassandra 15.设计模式 16.负载均衡 17.数据库 18.一致性算法 ...
Vagrant+Ansible+Cassandra DSE + Spark 1.2 是做什么的 安装 DSE 4.6 运营中心 5.1 Spark 1.2(带历史服务器) 作业服务器 石墨碳 石墨网 格拉法纳 调整 使用 vagrant-hostsupdater 插件更新您的本地 /etc/hosts...
FourCourses餐厅菜单微服务 使用AWS EC2实例扩展了FourCourses的餐厅菜单微服务。 在高峰流量时,该架构轻松支持每秒19,500+... Cassandra启用了行缓存,并将“复制因子”设置为3。两个数据库都植入了1000万个餐厅菜单
在内存中缓存数据库查询。 功能缺失 为每条线配置颜色,Y轴等 定期更新 显示属性配置 显示错误 “特殊”数据类型:字符串,布尔值,状态,频谱,... Cassandra验证(?) 一般鲁棒性 允许下载“原始”数据 将数据...
2. 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 不要删除数据 RAM是硬盘,硬盘是磁带 Amdahl定律和Gustafson定律 万兆以太网 3. 手段篇 一致性哈希 亚马逊的现状 算法的选择 Quorum NRW Vector clock ...
2. JVM 3.JAVA集合 4.JAVA多线程并发 5.JAVA基础 6.Spring 原理 7.微服务 8.Netty与RPC 9.网络10.日志 11.Zookeeper 12.Kafka 13.RabbitMO 14. Hbase 15.MongoDB 16.Cassandra 17.设计模式 18.负载均衡 19.数据库 20...
2.JVM 3.JAVA集合 4.JAVA多线程并发 5.JAVA基础 6.Spring 原理 7.微服务 8.Netty 与RPC 9.网络10.日志 11.Zookeeper 12.Kafka 13.RabbitMQ 14.Hbase 15.MongoDB 16.Cassandra 17.设计模式 18.负载均衡 19.数据库 20....
2 思想篇 2 CAP 2 最终一致性 2 变体 2 BASE 2 其他 2 I/O的五分钟法则 2 不要删除数据 2 RAM是硬盘,硬盘是磁带 2 Amdahl定律和Gustafson定律 2 万兆以太网 3 手段篇 3 一致性哈希 3 亚马逊的现状 3 算法的选择 3 ...