zoukankan      html  css  js  c++  java
  • Java web 自动备份数据库和log4j日志

    利用监听自动备份

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>muju_pro</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Log4jInitServlet</servlet-name>
        <servlet-class>com.rfx.servlet.Log4jInitServlet</servlet-class>//日志初始化类
        <init-param>
          <param-name>log4j</param-name>
          <param-value>/WEB-INF/log4j.properties</param-value>//日志资源文件配置log4j,jar
        </init-param>
        <load-on-startup>1</load-on-startup>//设置服务器启动延时多久执行
      </servlet>
      <servlet-mapping>
        <servlet-name>Log4jInitServlet</servlet-name>
        <url-pattern>*.init</url-pattern>//设置映射
      </servlet-mapping>
      <listener>
        <listener-class>com.rfx.listener.ZiJianListener</listener-class>//配置监听
      </listener>
      <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>//配置日志,这里用的spring的jar包,
      </listener>
    </web-app>

    监听

    package com.rfx.listener;
    
    import java.util.Timer;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    /**
     * <p>自检监听</p>
     * @author Administrator
     *
     */
    public class ZiJianListener implements ServletContextListener {
        private Timer timer=null;
        private final Log log = LogFactory.getLog(getClass());
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            timer =new Timer(true);
            //arg0.getServletContext().log("定时器已启动");//log4j
        //    System.out.println("定时器启动");
            log.info("定时器启动");
            //调用自检
            timer.schedule(new ZiJianTask(arg0.getServletContext()), 0,12*60*60*1000);
            //调用备份数据库
            timer.schedule(new DBBackUpTask(arg0.getServletContext()),0,24*60*60*1000);
            //arg0.getServletContext().log("已添加任务");
        }
    
    }

    备份数据库

    package com.rfx.listener;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.Format;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimerTask;
    
    import javax.servlet.ServletContext;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    
    public class DBBackUpTask  extends TimerTask{
        private ServletContext context=null;
        private final Log log = LogFactory.getLog(getClass());
        public  DBBackUpTask(ServletContext context) {
            this.context=context;
        }
         public static boolean exportDatabaseTool(String userName, String password, String SID, String savePath, String fileName) throws InterruptedException {  
                File saveFile = new File(savePath);  
                if (!saveFile.exists()) {// 如果目录不存在  
                    saveFile.mkdirs();// 创建文件夹  
                }  
                try {  
                    Process process = Runtime.getRuntime().exec("exp " + userName + "/" + password + "@" + SID + " file=" + savePath + "/" + fileName + ".dmp");  
                    if(process.waitFor() == 0){//0 表示线程正常终止。   
                        return true;  
                    }  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }
                return false;  
            }  
        @Override
        public void run() {
            Format format = new SimpleDateFormat("yyyyMMdd");
            String filePathString="MJku"+format.format(new Date());
              try {
                if (exportDatabaseTool("rfxmujuku", "rfx", "orcl", "D:/MuJuKuDBBeiFen", filePathString)) {  
                        System.out.println("数据库成功备份!!!");  
                    } else {  
                        System.out.println("数据库备份失败!!!");  
                    }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }  
            
        }
    
    }

    log4j资源文件

    log4j.rootLogger=debug, stdout ,R 
    
    ### stdout ### 
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd  HH:mm:ss}] %p  (%F:%L) - %m%n 
    ### R ### 
    log4j.appender.R=org.apache.log4j.RollingFileAppender 
    log4j.appender.R.File=D:/muju.log 
    log4j.appender.R.MaxFileSize=100KB 
    log4j.appender.R.MaxBackupIndex=5 
    
    log4j.appender.R.layout=org.apache.log4j.PatternLayout 
    log4j.appender.R.layout.ConversionPattern=[%d{yyyy-MM-dd  HH:mm:ss}] %p  %c - %m%n

    日志初始化

    package com.rfx.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.log4j.PropertyConfigurator;
    
    /**
     * Servlet implementation class Log4jInitServlet
     */
    @WebServlet("/Log4jInitServlet.init")
    public class Log4jInitServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        private final Log log = LogFactory.getLog(getClass());   
        /**
         * @see HttpServlet#HttpServlet()
         */
        public Log4jInitServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
        public void init() {
            String prefix = getServletContext().getRealPath("/");
            String file = getInitParameter("log4j");
    
            if (file != null) {
               //System.out.println("log4j 初始化成功");
            log.info("log4j初始化成功");
            PropertyConfigurator.configure(prefix+ file);
            } else {
                log.info("log4j初始化失败");
            //System.out.println("log4j 初始化失败");
            }
    
            }
    
    }

    自行导包

  • 相关阅读:
    CentOS7升级系统内核
    ASP.NET MVC控制器里捕获视图的错误验证信息(ErrorMessage)
    Android Studio小技巧
    ASP.NET 预编译笔记
    EnyimMemcached(64位)使用实例
    SQL Server Profiler小技巧——筛选请求
    [疑难杂症]解决实际开发中各种问题bug
    [整理]EF6.X更新了什么(版本历史中文版)
    史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~
    微信开发调试小工具进化→微信用户发送信息模拟器发布!——这标题起真是好数码暴龙的说
  • 原文地址:https://www.cnblogs.com/stepbystepwhx/p/7873701.html
Copyright © 2011-2022 走看看