文档章节

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

帅的不像男的
 帅的不像男的
发布于 2016/03/25 16:58
字数 1040
阅读 62
收藏 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
博文 88
码字总数 47054
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

造谣造到t-io老巢了

只发当事人的截图,不发表评论,以免有引导嫌疑 PS: 截图是由不同的人发过来的 本人已经不在此微信群 图3:有造谣的,就有反造谣的 图4是2018-09-23的t-io官方群的一个发言小统计,有助于让...

talent-tan
今天
71
0
heartbeat 资源

drbd+apache+heartbeat : http://blog.51cto.com/11838039/1827901 heartbeat双机热备的架设 : http://blog.51cto.com/11838039/1827560 对heaetbeat的深一步认识 : http://blog.51cto.co......

寰宇01
今天
4
0
Spring 转换 model 为 json 时增加属性

缘起 目前的项目中有个需求是在附件对象转换成 json 时增加个 url 属性,以前的方式是在返回附件对象或列表时候做一次统一处理,这次想看看 spring 或者 jackson fasterxml 是否自带类似功能...

郁也风
今天
4
0
10大PHP比特币开源项目

如果你是一个Phper,如果你希望学习区块链,那么本文列出的 10个开源的Php比特币项目,将有助于你了解在自己的应用中 如何加入对比特币的支持。 如果你希望快速掌握使用Php对接比特币钱包的方...

汇智网教程
今天
5
0
springclould feign客户端添加全局参数

用springclould feign作为调用服务的客户端,一般来说参数可以写在feignclient的方法参数里 有时需要所有feign请求都统一添加一些参数,例如token用于鉴权等,可以这样做: 添加一个配置类,...

canneljls
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部