`

xml处理工具包使用

    博客分类:
  • XML
阅读更多
需求 :生成动态数据源配置文件为列


package com.bky.datasource;

import java.util.List;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root(name="beans")
public class MutilDataSourceXmlConfig {

	@Attribute(name="xmlns")
	private String xmlns = "http://www.springframework.org/schema/beans";
	
	@Attribute(name="xmlns:xsi")
	private String xmlnsxsi = "http://www.w3.org/2001/XMLSchema-instance";
	
	@Attribute(name="xsi:schemaLocation")
	private String xsischemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd";
	
	
	@ElementList(entry = "bean", inline = true,required = true)
	private List<MutilDataSourceXmlConfigBean> beans ;


	public String getXmlns() {
		return xmlns;
	}


	public void setXmlns(String xmlns) {
		this.xmlns = xmlns;
	}


	public String getXmlnsxsi() {
		return xmlnsxsi;
	}


	public void setXmlnsxsi(String xmlnsxsi) {
		this.xmlnsxsi = xmlnsxsi;
	}


	public String getXsischemaLocation() {
		return xsischemaLocation;
	}


	public void setXsischemaLocation(String xsischemaLocation) {
		this.xsischemaLocation = xsischemaLocation;
	}


	public List<MutilDataSourceXmlConfigBean> getBeans() {
		return beans;
	}


	public void setBeans(List<MutilDataSourceXmlConfigBean> beans) {
		this.beans = beans;
	}
	
	
	
	
}


package com.bky.datasource;

import java.util.List;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementArray;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root
public class MutilDataSourceXmlConfigBean {

	@Attribute(name="id")
	private String id ;
	
	@Attribute(name="class")
	private String clazz ;
	
	@Attribute(name="destroy-method")
	private String destroyMethod ="close";
	
	@Attribute(name="lazy-init")
	private boolean lazyInit = true;
	
	@ElementList(entry = "property", inline = true , required= true)
	private List<MutilDataSourceXmlConfigBeanProperty> properties ;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getClazz() {
		return clazz;
	}

	public void setClazz(String clazz) {
		this.clazz = clazz;
	}

	public String getDestroyMethod() {
		return destroyMethod;
	}

	public void setDestroyMethod(String destroyMethod) {
		this.destroyMethod = destroyMethod;
	}

	public boolean isLazyInit() {
		return lazyInit;
	}

	public void setLazyInit(boolean lazyInit) {
		this.lazyInit = lazyInit;
	}

	public List<MutilDataSourceXmlConfigBeanProperty> getProperties() {
		return properties;
	}

	public void setProperties(List<MutilDataSourceXmlConfigBeanProperty> properties) {
		this.properties = properties;
	}
	
	
	
}


package com.bky.datasource;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;

@Root
public class MutilDataSourceXmlConfigBeanProperty {

	@Attribute(name="name")
	private String name ;
	
	@Attribute(name="value")
	private String value ;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
	
}



package cn.richinfo.cmail.dbrouter;

import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

public class MutilDataSourceXmlConfigUtil {
	
	
	public static void createXml(MutilDataSourceXmlConfig config , 
			Map<MutilDataSourceXmlConfigBean, Map<String, String>> maps, String path,ContextHolder handdler) throws Exception{

			Set<String> set = new HashSet<String>() ;
		    for (MutilDataSourceXmlConfigBean key : maps.keySet()) {
		    	set.add(key.getId()) ;
		    }
			handdler.init(set) ;
			MutilDataSourceXmlConfig configXml = createMutilDataSourceXmlConfig(config,maps,handdler);
			Serializer serializer = new Persister();
			serializer.write(configXml, new File(path));
	}
	
	public static MutilDataSourceXmlConfig createMutilDataSourceXmlConfig(MutilDataSourceXmlConfig config ,Map<MutilDataSourceXmlConfigBean, Map<String, String>> beansMap,ContextHolder handdler) {

		List<MutilDataSourceXmlConfigBean> beanList = new ArrayList<MutilDataSourceXmlConfigBean>();
		for (MutilDataSourceXmlConfigBean key : beansMap.keySet()) {
			//设置bean属性id
			key.setId(handdler.getValue(key.getId())) ;
			beanList.add(createMutilDataSourceXmlConfigBean(key, beansMap.get(key)));
		}
		config.setBeans(beanList) ;
		return config;
	}
/*
	public static void createXml(MutilDataSourceXmlConfig config ,MutilDataSourceXmlConfigBean bean , 
			Map<String, Map<String, String>> maps, String path,ContextHolder handdler) throws Exception{

			handdler.init(maps.keySet()) ;
			MutilDataSourceXmlConfig beans = createMutilDataSourceXmlConfig(config,bean, maps,handdler);
			Serializer serializer = new Persister();
			serializer.write(beans, new File(path));
	}
	
	public static MutilDataSourceXmlConfig createMutilDataSourceXmlConfig(MutilDataSourceXmlConfig beans ,MutilDataSourceXmlConfigBean bean ,Map<String, Map<String, String>> beansMap,ContextHolder handdler) {
		MutilDataSourceXmlConfig config = new MutilDataSourceXmlConfig();
		//构建xml属性
		config.setXmlns(beans.getXmlns()) ;
		config.setXmlnsxsi(beans.getXmlnsxsi()) ;
		config.setXsischemaLocation(beans.getXsischemaLocation()) ;

		List<MutilDataSourceXmlConfigBean> beanList = new ArrayList<MutilDataSourceXmlConfigBean>();
		for (String key : beansMap.keySet()) {
			//设置bean属性id
			bean.setId(handdler.getValue(key)) ;
			beanList.add(createMutilDataSourceXmlConfigBean(bean, beansMap.get(key)));
		}
		beans.setBeans(beanList) ;
		return beans;
	}
*/
	public static MutilDataSourceXmlConfigBean createMutilDataSourceXmlConfigBean(MutilDataSourceXmlConfigBean bean,
			Map<String, String> propMap) {
		// 构建bean
		//MutilDataSourceXmlConfigBean bean = new MutilDataSourceXmlConfigBean();
		//bean.setId(param.getId());
		//bean.setClazz(param.getClazz());
		/*if (param.getDestroyMethod() != null) {
			bean.setDestroyMethod(param.getDestroyMethod());
		}
		bean.setLazyInit(param.isLazyInit());*/

		bean.setProperties(createMutilDataSourceXmlConfigBeanProperty(propMap));

		return bean;

	}

	public static List<MutilDataSourceXmlConfigBeanProperty> createMutilDataSourceXmlConfigBeanProperty(
			Map<String, String> map) {
		List<MutilDataSourceXmlConfigBeanProperty> proList = new ArrayList<MutilDataSourceXmlConfigBeanProperty>();
		MutilDataSourceXmlConfigBeanProperty property = null;
		for (String key : map.keySet()) {
			property = new MutilDataSourceXmlConfigBeanProperty();
			property.setName(key);
			property.setValue(map.get(key));
			proList.add(property);
		}

		return proList;
	}

}


main方法
/**
	 * 生成数据库路由bean配置文件
	 * @param list
	 * @param filePath
	 * @param ddrService
	 * @author wuchaohui
	 */
	public static void createRoutBeanXml(List<DbRouterModel> list, String filePath ,DbRouterDatasourcePropertyService ddrService) {

		try {
			Map<MutilDataSourceXmlConfigBean, Map<String, String>> maps = new HashMap<MutilDataSourceXmlConfigBean, Map<String, String>>();

			Map<String, String> map = null;
			
			for (int i = 0; i < list.size(); i++) {
				map = new HashMap<String, String>();
				DbRouterModel model = list.get(i);
				dealDbRouterModelNullAttribute(model) ;
				if (DbRouterConst.DYNAMIC_DATASOURCE_DRUID_TYPE.equals(model.getDbRouterDatasourceType())) {// druid
					List<DbRouterDatasourcePropertyModel> props = ddrService
							.searchList(model.getDbRouterDatasourceType());

					DruidDataSourceAttrModel attr = getDruidDataSourceAttrModel(props,model.getDbType(),model.getDbIp(),model.getDbPort(),model.getDbName(),model.getDbUser(),model.getDbPwd());

					map = BeanCopierUtils.getProperties(attr);
					
					MutilDataSourceXmlConfigBean bean = new MutilDataSourceXmlConfigBean() ;
					bean.setId(String.valueOf(model.getCorpId())) ;
					
					bean.setClazz(DbRouterConst.DYNAMIC_DATASOURCE_DRUID_NAME);
					bean.setDestroyMethod("close");
					bean.setLazyInit(true);
					
					maps.put(bean, map);
				}

			}

			ContextHolder handdler = new LogRouterContextHolder();
			MutilDataSourceXmlConfig configParam = new MutilDataSourceXmlConfig();

			MutilDataSourceXmlConfigUtil.createXml(configParam, maps, filePath, handdler);
		} catch (Exception e) {
			logger.error("cmd = HelpUtil:createRoutBeanXml | msg = 初始化生成日志懂爱数据库配置异常",e);
		}

	}




执行结果:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
   <bean id="ds_cmail_dbrouter_1002" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" lazy-init="true">
      <property name="testOnBorrow" value="false"/>
      <property name="testWhileIdle" value="true"/>
      <property name="validationQuery" value="SELECT &apos;x&apos;"/>
      <property name="password" value="2146230530"/>
      <property name="url" value="jdbc:mysql://192.168.34.143:3308/test_logreport?null"/>
      <property name="removeAbandonedTimeout" value="180"/>
      <property name="testOnReturn" value="false"/>
      <property name="maxActive" value="20"/>
      <property name="username" value="richmail"/>
      <property name="logAbandoned" value="true"/>
      <property name="maxOpenPreparedStatements" value="10"/>
      <property name="maxWait" value="60000"/>
      <property name="minIdle" value="3"/>
      <property name="removeAbandoned" value="true"/>
      <property name="timeBetweenEvictionRunsMillis" value="30000"/>
      <property name="minEvictableIdleTimeMillis" value="1800000"/>
      <property name="initialSize" value="1"/>
   </bean>
   <bean id="ds_cmail_dbrouter_1001" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" lazy-init="true">
      <property name="testOnBorrow" value="false"/>
      <property name="testWhileIdle" value="true"/>
      <property name="validationQuery" value="SELECT &apos;x&apos;"/>
      <property name="password" value="2146230530"/>
      <property name="url" value="jdbc:mysql://192.168.34.143:3308/test_logreport?null"/>
      <property name="removeAbandonedTimeout" value="180"/>
      <property name="testOnReturn" value="false"/>
      <property name="maxActive" value="20"/>
      <property name="username" value="richmail"/>
      <property name="logAbandoned" value="true"/>
      <property name="maxOpenPreparedStatements" value="10"/>
      <property name="maxWait" value="60000"/>
      <property name="minIdle" value="3"/>
      <property name="removeAbandoned" value="true"/>
      <property name="timeBetweenEvictionRunsMillis" value="30000"/>
      <property name="minEvictableIdleTimeMillis" value="1800000"/>
      <property name="initialSize" value="1"/>
   </bean>
   <bean id="ds_cmail_dbrouter_1000" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" lazy-init="true">
      <property name="testOnBorrow" value="false"/>
      <property name="testWhileIdle" value="true"/>
      <property name="validationQuery" value="SELECT &apos;x&apos;"/>
      <property name="password" value="2146230530"/>
      <property name="url" value="jdbc:mysql://192.168.34.143:3308/test_logreport?null"/>
      <property name="removeAbandonedTimeout" value="180"/>
      <property name="testOnReturn" value="false"/>
      <property name="maxActive" value="20"/>
      <property name="username" value="richmail"/>
      <property name="logAbandoned" value="true"/>
      <property name="maxOpenPreparedStatements" value="10"/>
      <property name="maxWait" value="60000"/>
      <property name="minIdle" value="3"/>
      <property name="removeAbandoned" value="true"/>
      <property name="timeBetweenEvictionRunsMillis" value="30000"/>
      <property name="minEvictableIdleTimeMillis" value="1800000"/>
      <property name="initialSize" value="1"/>
   </bean>
   <bean id="ds_cmail_dbrouter_1010" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" lazy-init="true">
      <property name="testOnBorrow" value="false"/>
      <property name="testWhileIdle" value="true"/>
      <property name="validationQuery" value="SELECT &apos;x&apos;"/>
      <property name="password" value="2146230530"/>
      <property name="url" value="jdbc:mysql://192.168.34.143:3308/test_logreport?null"/>
      <property name="removeAbandonedTimeout" value="180"/>
      <property name="testOnReturn" value="false"/>
      <property name="maxActive" value="20"/>
      <property name="username" value="richmail"/>
      <property name="logAbandoned" value="true"/>
      <property name="maxOpenPreparedStatements" value="10"/>
      <property name="maxWait" value="60000"/>
      <property name="minIdle" value="3"/>
      <property name="removeAbandoned" value="true"/>
      <property name="timeBetweenEvictionRunsMillis" value="30000"/>
      <property name="minEvictableIdleTimeMillis" value="1800000"/>
      <property name="initialSize" value="1"/>
   </bean>
</beans>

分享到:
评论

相关推荐

    整套xml开发工具包

    总的来说,"整套xml开发工具包"提供了XML解析和日志记录的关键组件,对于任何涉及到XML处理和日志管理的Java项目来说都是不可或缺的资源。掌握DOM4j和log4j的使用,将大大提高开发效率和代码质量。

    一个小型的XML解析工具包

    总的来说,这个小型XML解析工具包是开发者处理XML文档的得力助手,通过封装XML解析的核心逻辑,降低了理解和使用XML的门槛,提高了开发效率。不论你是初学者还是经验丰富的开发者,都可以从中受益。

    java操作xml工具包

    这里提到的两个关键库——XStream和DOM4J,都是Java中广泛使用的XML处理工具。 XStream是一个Java库,它提供了一种简单的方式来序列化和反序列化Java对象到XML,反之亦然。它的核心优势在于其简洁的API和易用性。...

    java实用工具包大众型XML处理

    Java实用工具包中的XML处理是Java开发者经常遇到的一项任务,特别是在处理数据交换、配置文件或者存储结构化数据时。XML(eXtensible Markup Language)因其结构清晰、可读性强的特点,被广泛应用。本工具包专门针对...

    xml解析jar包

    1. dom4j-1.6.1.jar:这是一个灵活且功能强大的Java XML API,它提供了全面的XML处理功能,包括XML的读取、写入、修改、搜索以及XPath支持。DOM4J基于DOM模型,但更易于使用,且性能优于标准DOM。它支持事件驱动的...

    java实用工具包大众型XML处理.zip

    Java实用工具包大众型XML处理主要关注的是在Java编程环境中如何高效、便捷地处理XML文档。XML(Extensible Markup Language)是一种广泛用于数据交换和存储的标记语言,它具有良好的可读性和结构化特性,因此在Java...

    java一键xml转map,一键map转xml工具类

    本文将详细讲解如何使用Java实现XML到Map以及Map到XML的一键转换,并介绍一个已封装好的工具类`EasyXmlUtil`。 首先,XML到Map的转换涉及到XML的解析。在Java中,我们可以使用`javax.xml.parsers....

    xml解析工具jar包

    `dom4j`是一个非常流行的Java XML API,它提供了全面且强大的XML处理功能,包括读取、写入、修改和操作XML文档。`dom4j-1.6.1.jar`是这个库的特定版本,它允许开发者通过DOM、SAX和StAX方式解析XML,同时支持XPath...

    Xml工具方法

    在Java编程中,处理XML文件通常需要利用特定的工具方法。以下将详细介绍标题和描述中提到的三个XML工具方法: 1. **根据XML内容转成复杂嵌套类对象信息** 这个过程称为XML到对象的反序列化。Java提供了多种库来...

    java实用工具包(大众型)--XML处理

    该包主要工作是封装,把操作简单明了化,可以让那些对document的东东望而生畏的人不用去"头痛",使用xml处理很简单明了。上面的3个例子只有取属性,其实还有advanceGetNode("path/map[0]")来直接获取节点,然后就可以...

    XML的jar包

    在Java项目中,常见的XML处理库有Apache的Xerces和Woodstox,它们提供了高效的XML解析器和实现。此外,Spring框架也内置了对XML配置的支持,使得开发者可以使用XML来定义bean和配置。 在使用XML的jar包时,需要注意...

    海关报文解析转换工具包

    【海关报文解析转换工具包】是一个专门针对电子报文处理的软件工具,它能够帮助用户解析、转换和处理海关进出口业务中的各种电子数据报文。在国际贸易中,海关报文是至关重要的,它们包含了货物的详细信息,如商品...

    XML查看工具

    在使用XML查看工具时,用户可以有效地提高工作效率,尤其是在处理大型或复杂XML文件时。通过这些工具,不仅可以快速定位数据,还能进行结构化的数据分析,对XML文档进行深入理解和操作。在IT行业中,掌握一款高效的...

    vtd-xml XML解析工具

    它在XML处理领域中因其性能优异、内存占用低而受到广泛关注。"多快好省地建设社会主义"这句话虽然是一种比喻,但形象地表达了VTD-XML在处理XML文档时所追求的目标:快速、高效、节省资源。 VTD(Virtual Token ...

    Java操作xml文件工具包dom4j源码

    Java操作XML文件是一种常见的任务,尤其在处理配置文件、数据交换或者...这有助于提高你处理XML问题的能力,并可能启发你设计更高效的XML处理方案。对于Java开发者来说,深入理解DOM4J源码是一个提升技能的重要步骤。

    解析xml的jar包

    总之,JDOM为Java开发者提供了便利的XML处理工具,通过其丰富的API可以轻松地解析、创建和修改XML文档。无论你是新手还是经验丰富的开发者,理解JDOM的工作原理及其核心功能,都将极大地提升你在处理XML任务时的效率...

    matlab的xml工具箱.pdf

    MATLAB的XML工具箱是一个扩展包,它允许用户在MATLAB中读取、写入以及处理XML文件。通过阅读这份文件内容,我们可以了解到该工具箱在操作XML文件时的一些重要知识点。 首先,文档提到的xmlwrite函数可以将MATLAB的...

    java 操作xml文件(包含xml文件和对应jar包)

    Java操作XML文件是Java开发中常见的一项任务,特别是在处理配置、数据交换或存储...理解这些工具的工作原理和使用方法是Java开发中的重要技能,压缩包中的项目和jar包提供了一个实际操作的环境,有助于加深理解和实践。

    xmlxml压缩工具

    “xmlxml压缩工具”可能是指一个专门针对XML文件进行压缩处理的软件或库。这种工具的主要功能可能是减小XML文件的大小,提高存储效率和网络传输速度。XML文件由于其结构特性,往往比文本文件大,特别是在包含大量...

    XML校验工具,可以用来进行XML合法性检验

    通过使用W3C提供的XML校验工具,开发者可以轻松地确保XML文档的合法性和一致性,从而提高数据处理的可靠性和效率。无论是对于个人开发者还是企业级项目,掌握如何有效地利用这些工具都是非常重要的。

Global site tag (gtag.js) - Google Analytics