文档章节

写个单线程读写xml文件并保存数据到数据库(公司xml文件是项目运行方法的日志)

帅的不像男的
 帅的不像男的
发布于 2016/03/25 16:58
字数 1040
阅读 60
收藏 0
点赞 1
评论 0
创建servlet类随tomcat启动
public class MyExpServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private MyExpThread myExpThread;

	public MyExpServlet() {
	}

	public void init() {
		String str = null;
		if (str == null && myExpThread == null) {
			myExpThread = new MyExpThread();
			myExpThread.start(); // servlet 上下文初始化时启动 socket
			System.out.println("线程开始!"); 
		}
	}

	public void doGet(HttpServletRequest httpservletrequest,
			HttpServletResponse httpservletresponse) throws ServletException,
			IOException {
	}

	public void destory() {
		if (myExpThread != null && myExpThread.isInterrupted()) {
			myExpThread.interrupt();
		}
	}
}
线程类继承Thread重写run方法
/**
 * 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据
 * 
 * @author Champion.Wong
 * 
 */
class MyExpThread extends Thread {
	public void run() {
		while (!this.isInterrupted()) {// 线程未中断执行循环
			try {
				Thread.sleep(60000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			// ------------------ 开始执行 ---------------------------
			try {
				MyExpXml.saveXml();
			} catch (DocumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
xml文件的读取及写入
public class MyExpXml{
	 /**
	  * 创建一个XML文档
	  * @return doc 返回该文档
	  */
	 public static Document createXMLDocument(String name,String parameters,String exception,String type){
	  Document doc = null;
	  doc = DocumentHelper.createDocument();
	  doc.addComment("edited by hty");
	  Element root = doc.addElement("class");;
	  Element method = root.addElement("method");
	  //method.addAttribute("id","11");
	  method.addElement("name").setText(name);
	  method.addElement("parameters").setText(parameters);
	  method.addElement("exception").setText(exception);
	  method.addElement("type").setText(type);
	  method.addElement("date").setText(DateTimeUtil.getDate());
	  return doc;
	 }
	 /**
	  * 增加一个根节点
	  * @return doc 返回该文档
	  */
	 public static Document addXMLDocument(Document doc,String name,String parameters,String exception,String type){
	  if(doc!=null){
		  Element root = doc.getRootElement();
		  Element method = root.addElement("method");
		  //method.addAttribute("id","11");
		  method.addElement("name").setText(name);
		  method.addElement("parameters").setText(parameters);
		  method.addElement("exception").setText(exception);
		  method.addElement("type").setText(type);
		  method.addElement("date").setText(DateTimeUtil.getDate());
	  }
	  return doc;
	 }
	 
	 /**
	  * 解析XML文档
	  * @param xmlFile
	  * @return XML文档
	  * @throws DocumentException
	  * @throws FileNotFoundException
	  */
	 public static Document parse(String xmlFile) throws DocumentException, FileNotFoundException{
	  SAXReader reader = new SAXReader();
	  Document doc = reader.read(new File(xmlFile));
	  return doc;
	 }
	 
	 /***
	  * 将XML文档输出到控制台
	  * @param doc
	  * @throws IOException
	  */
	 public static void printDocument(Document doc) throws IOException{
	  OutputFormat format = OutputFormat.createPrettyPrint();
	  format.setEncoding("UTF-8");
	  format.setIndent(true);
	  //OutputFormat format = OutputFormat.createPrettyPrint();
	  XMLWriter writer = new XMLWriter(new OutputStreamWriter(System.out),format);
	  writer.write(doc);
	  writer.close();
	 }
	 /**
	  * 保存XML文档
	  * @param doc
	  * @throws IOException
	  */
	 public static void saveDocument(Document doc,String ph) throws IOException{
	  OutputFormat format = OutputFormat.createPrettyPrint();
	  format.setEncoding("UTF-8");
	  format.setIndent(true);
	  //OutputFormat format = OutputFormat.createPrettyPrint();
	  XMLWriter writer = new XMLWriter(new FileOutputStream(ph),format);
	  writer.write(doc);
	  writer.close();
	 }
	 /** 
	  * 删除单个文件 
	  * @param   sPath    被删除文件的文件名 
	  * @return 单个文件删除成功返回true,否则返回false 
	  */  
	 public static boolean deleteFile(String sPath) {  
	     boolean flag = false;  
	     File file = new File(sPath);  
	     // 路径为文件且不为空则进行删除  
	     if (file.isFile() && file.exists()) {  
	         file.delete();  
	         flag = true;  
	     }  
	     return flag;  
	 }  
	
	public static void addLogXml(AnziMethodFunction amf){
		try{
			 SAXReader saxReader=new SAXReader();
			 String path = Constant.expXml_path;
			 File file2 = new File(path);
			if (!file2.exists()) {
				file2.mkdirs();
			}
			Date date = new Date();
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//小写的mm表示的是分钟 
			String sdate = (sdf.format(date).toString()).substring(0,10);
			String str = "/"+sdate+".xml";
			String ph = Constant.expXml_path+str;
			File file = new File(ph);
			if (!file.exists()) {
				Document doc = createXMLDocument(amf.getName(), amf.getParameters(), amf.getException(), amf.getType());
				saveDocument(doc, ph);
			} else {
				Document doc = saxReader.read(file);
				Document doc1 = addXMLDocument(doc, amf.getName(), amf.getParameters(), amf.getException(), amf.getType());
				saveDocument(doc1, ph);				
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	  /** 
     * 遍历当前节点元素下面的所有(元素的)子节点 
     *  
     * @param node 
	 * @throws ParseException 
     */  
    public static void listNodes(Element node,AnziMethodFunction amf) throws ParseException {  
    	String key = node.getName();
    	String value = node.getText(); 
    	if(key.equals("name")){
    		amf.setName(value);
    	}else if(key.equals("parameters")){
    		amf.setParameters(value);
    	}else if(key.equals("exception")){
    		amf.setException(value);
    	}else if(key.equals("type")){
    		amf.setType(value);
    	}else if(key.equals("date")){
        	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//小写的mm表示的是分钟 
    		amf.setDate(sdf.parse(value));
        	RedeemManager redeemManage = (RedeemManager) ServiceLocator.getService("redeemManager");
        	redeemManage.saveAnziMethodFunction(amf);
        	AnziMethodFunction amf1 = new AnziMethodFunction();
        	amf = amf1;
    	}
        //System.out.println("当前节点的名称::" + node.getName());  
        // 获取当前节点的所有属性节点  
        List<Attribute> list = node.attributes();  
        // 遍历属性节点  
        for (Attribute attr : list) {  
            System.out.println(attr.getText() + "-----" + attr.getName()  
                    + "---" + attr.getValue());  
        }  
  
        //System.out.println("文本内容::::" + node.getText());  
        // 当前节点下面子节点迭代器  
        Iterator<Element> it = node.elementIterator();  
        // 遍历  
        while (it.hasNext()) {  
            // 获取某个子节点对象  
            Element e = it.next(); 
            // 对子节点进行遍历  
            listNodes(e,amf);  
        }  
    } 

	public static void saveXml() throws DocumentException, ParseException {
		// 创建saxReader对象
		SAXReader reader = new SAXReader();
		Date date = new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//小写的mm表示的是分钟 
		String sdate = (sdf.format(date).toString()).substring(0,10);
		String str = "/"+sdate+".xml";
		String path = Constant.expXml_path+str;//服务器存储图片路径 上传的最终绝对路径
		File file = new File(path);
		if (!file.exists()) {
			return;
		} else {
			// 通过read方法读取一个文件 转换成Document对象
			Document document = reader.read(file);
			if (document == null) {
			} else {
				// 获取根节点元素对象
				Element node = document.getRootElement();
				AnziMethodFunction amf = new AnziMethodFunction();
				// 遍历所有的元素节点
				listNodes(node, amf);
				deleteFile(path);
			}
		}
	}
}
web.xml文件配置线程随tomcat启动
<!-- 创建一个servlet,与服务服务同时启动,检测异常  --> 
<servlet>  
    <servlet-name>MyExpServlet</servlet-name>  
    <servlet-class>com.jmsht.util.MyExpServlet</servlet-class>  
    <load-on-startup>4</load-on-startup><!-- 数字越小,启动的优先级越高,必须大于0 -->  
</servlet>


© 著作权归作者所有

共有 人打赏支持
帅的不像男的
粉丝 10
博文 87
码字总数 46416
作品 0
深圳
程序员
Mule ESB File Connector轮询单个文件的实现(3)

本系列的(1)和(2)介绍了如何修改File Connector的轮询机制,使得File Connector每次轮询只轮询一个文件。本文主要阐述如何对前面的实现做进一步的修改,这个修改有以下两点: 1)如何自定义定义...

杨延庆
2016/08/08
54
2
学习hibernate(一) -- hibernate环境搭建

1.下载hibernate 需要到hibernate的官网下载一个hibernate。网址是:http://hibernate.org/orm/downloads/ 2.解压hibernate 下载后解压缩,得到一个hibernate-release-4.3.11.Final文件夹(我...

杰克鹏仔
2016/03/22
249
0
铁头娃之Hibernate学习(一)

1. Hibernate简单介绍 Hibernate是一个持久层的ORM(Object Relational Mapping)框架,通过编写XML映射文件使得Java对象与数据库表产生关联,并且Hibernate几乎支持所有的关系型数据库(RDB...

许渺
2017/11/28
0
0
java开发大全、系列文章、精品教程

全栈工程师开发手册 (作者:栾鹏) 快捷链接: 一个demo学会java java实现使用JDBC-ODBC桥操作数据库 java中RandomAccessFile随机文件读写,文件追加和部分读取 java使用socket实现一个多线...

luanpeng825485697
2017/10/01
0
0
Memcached, Redis, MongoDB区别

mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。mongodb和memcached不存在谁替换谁的问题。 和memcached更为接近...

雍雍_yoyo
2016/03/01
70
0
MySQL主从同步错误情况下的全量备份恢复

一个Web系统有一主两从的小型MySQL集群,通过Amoeba调度。近日发现主从之间的同步发生异常,从库无法更新数据。试了多种方法无法恢复后,决定重新建立从库数据。方法如下。 假设主库为serve...

go2school
2016/07/15
31
0
java 私塾随堂笔记——Hibernate(上)

java 私塾随堂笔记——Hibernate(上) 第一章 Hibernate介绍 一.是什么: Hibernate是轻量级的ORM框架。 1.ORM(ORMapping) Object——Mapping——→Relation DB Object←——JDBC———Rel...

luodis
2011/03/21
355
0
VoltDB 简介和入门

简介 过去几年来,出现了一种称为 NoSQL 的新型数据库管理系统。设计这些数据存储是为了克服在扩展传统关系数据库来处理一些应用程序时必须处理的数据负载类型的难题,比如说 Amazon。这种可...

IBMdW
2013/03/04
9.1K
0
linux+nginx并发量大的时候出现Too many open files问题

一开始的时候我考虑是数据库的问题,因为平时数据库的查询速度就比较慢,并且负载均衡分发到两台服务器都是用同一个数据库,数据库出了问题,合情合理。但是无奈把数据库迁移到另外一台服务器...

仁江
2016/03/16
108
0
mysql5.7的主从复制+读写分离

Mysql主从复制与读写分离 目录: 1、mysql主从复制工作原理 2、mysql读写分离原理,使用Amoeba中间代理层实现读写分离 3、在vmware中实现mysql主从复制+读写分离 一、Mysql主从复制的工作原理...

咖啡猫Mr
2017/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Win10专业版安装GIT后使用Git Bash闪退解决办法

百度后把过程和最终解决办法记录下来: 百度首先出来的解决办法如下: 来自:https://segmentfault.com/q/1010000012722511?sort=created 重启电脑 重新安装 安装到C盘 尝试网上的教程 \Git...

特拉仔
13分钟前
0
0
设计模式

1.装饰器模式 概念 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。 实现 增加一个修饰类包裹原来的...

EasyProgramming
28分钟前
1
0
用python2和opencv进行人脸识别

一、安装cv2 sudo apt-get install python-opencv opencv-data 二、 Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 ...

wangxuwei
28分钟前
0
0
python模板中循环字典

{% for k,v in user.items %} {{ k}} {{ v}} {% endfor %}

南桥北木
56分钟前
0
0
Java8系列之重新认识HashMap

简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类...

HOT_POT
今天
0
0
获取调用方的className

/** * 获取调用方的class * @return */private static String getInvoke() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); S......

iborder
今天
0
0
深入了解一下Redis的内存模型!

一前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符...

Java填坑之路
今天
1
0
从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加。在这个背景下,平台的技术架构也完成了从传统的单体应用到微...

老道士
今天
1
0
大数据学习的各个阶段

第一阶段:Linux课程讲解Linux基础操作,讲的是在命令行下进行文件系统的操作,这是Hadoop学习的基础,后面的所有视频都是基于linux操作的。鉴于很多学员没有linux基础,特增加该内容,保证零linux...

董黎明
今天
0
0
CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部