写个单线程读写xml文件并保存数据到数据库(公司xml文件是项目运行方法的日志)
写个单线程读写xml文件并保存数据到数据库(公司xml文件是项目运行方法的日志)
帅的不像男的 发表于2年前
写个单线程读写xml文件并保存数据到数据库(公司xml文件是项目运行方法的日志)
  • 发表于 2年前
  • 阅读 49
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 没毕业的我以前对线程畏之如虎,实践和探索是对自己的不断升华!
创建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>


共有 人打赏支持
粉丝 9
博文 77
码字总数 43911
×
帅的不像男的
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: