永久链接: http://gaojingsong.iteye.com/blog/2374179
预览文章: 【Mycat1.6之加载Schema的DataHosts完整属性源码解读】
一、Mycat1.6只Schema加载DataHosts完整属性源码解读
private final static String DEFAULT_DTD = "/schema.dtd"; private final static String DEFAULT_XML = "/schema.xml"; public XMLSchemaLoader(String schemaFile, String ruleFile) { //先读取rule.xml XMLRuleLoader ruleLoader = new XMLRuleLoader(ruleFile); //将tableRules拿出,用于这里加载Schema做rule有效判断,以及之后的分片路由计算 this.tableRules = ruleLoader.getTableRules(); //释放ruleLoader ruleLoader = null; this.dataHosts = new HashMap<String, DataHostConfig>(); this.dataNodes = new HashMap<String, DataNodeConfig>(); this.schemas = new HashMap<String, SchemaConfig>(); //读取加载schema配置 this.load(DEFAULT_DTD, schemaFile == null ? DEFAULT_XML : schemaFile); } //加载顺序:主机/节点/ Schema private void load(String dtdFile, String xmlFile) { InputStream dtd = null; InputStream xml = null; dtd = XMLSchemaLoader.class.getResourceAsStream(dtdFile); xml = XMLSchemaLoader.class.getResourceAsStream(xmlFile); Element root = ConfigUtil.getDocument(dtd, xml).getDocumentElement(); //先加载所有的DataHost loadDataHosts(root); //再加载所有的DataNode loadDataNodes(root); //最后加载所有的Schema loadSchemas(root); } /** <dataHost name="localhost1_gaojingsong1" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="db2" dbDriver="jdbc" switchType="-1" slaveThreshold="" tempReadHostAvailable="" filters="" logTime=""> <heartbeat>select 1 from sysibm.sysdummy1</heartbeat> <connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql> <writeHost host="hostM1" url="jdbc:db2://19:50000/TEST001" user="db2inst1" password="123456" > </writeHost> </dataHost> */ private void loadDataHosts(Element root) { NodeList list = root.getElementsByTagName("dataHost"); for (int i = 0,