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 初始化失敗");
        }

        }

}

自行導包

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM