利用监听自动备份

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <display-name>muju_pro</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.html</welcome-file>
  6. <welcome-file>index.htm</welcome-file>
  7. <welcome-file>index.jsp</welcome-file>
  8. <welcome-file>default.html</welcome-file>
  9. <welcome-file>default.htm</welcome-file>
  10. <welcome-file>default.jsp</welcome-file>
  11. </welcome-file-list>
  12. <servlet>
  13. <servlet-name>Log4jInitServlet</servlet-name>
  14. <servlet-class>com.rfx.servlet.Log4jInitServlet</servlet-class>//日志初始化类
  15. <init-param>
  16. <param-name>log4j</param-name>
  17. <param-value>/WEB-INF/log4j.properties</param-value>//日志资源文件配置log4j,jar
  18. </init-param>
  19. <load-on-startup>1</load-on-startup>//设置服务器启动延时多久执行
  20. </servlet>
  21. <servlet-mapping>
  22. <servlet-name>Log4jInitServlet</servlet-name>
  23. <url-pattern>*.init</url-pattern>//设置映射
  24. </servlet-mapping>
  25. <listener>
  26. <listener-class>com.rfx.listener.ZiJianListener</listener-class>//配置监听
  27. </listener>
  28. <listener>
  29. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>//配置日志,这里用的spring的jar包,
  30. </listener>
  31. </web-app>

监听

  1. package com.rfx.listener;
  2.  
  3. import java.util.Timer;
  4.  
  5. import javax.servlet.ServletContextEvent;
  6. import javax.servlet.ServletContextListener;
  7.  
  8. import org.apache.commons.logging.Log;
  9. import org.apache.commons.logging.LogFactory;
  10.  
  11. /**
  12. * <p>自检监听</p>
  13. * @author Administrator
  14. *
  15. */
  16. public class ZiJianListener implements ServletContextListener {
  17. private Timer timer=null;
  18. private final Log log = LogFactory.getLog(getClass());
  19. @Override
  20. public void contextDestroyed(ServletContextEvent arg0) {
  21.  
  22. }
  23.  
  24. @Override
  25. public void contextInitialized(ServletContextEvent arg0) {
  26. timer =new Timer(true);
  27. //arg0.getServletContext().log("定时器已启动");//log4j
  28. // System.out.println("定时器启动");
  29. log.info("定时器启动");
  30. //调用自检
  31. timer.schedule(new ZiJianTask(arg0.getServletContext()), 0,12*60*60*1000);
  32. //调用备份数据库
  33. timer.schedule(new DBBackUpTask(arg0.getServletContext()),0,24*60*60*1000);
  34. //arg0.getServletContext().log("已添加任务");
  35. }
  36.  
  37. }

备份数据库

  1. package com.rfx.listener;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.text.Format;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. import java.util.TimerTask;
  9.  
  10. import javax.servlet.ServletContext;
  11.  
  12. import org.apache.commons.logging.Log;
  13. import org.apache.commons.logging.LogFactory;
  14.  
  15. public class DBBackUpTask extends TimerTask{
  16. private ServletContext context=null;
  17. private final Log log = LogFactory.getLog(getClass());
  18. public DBBackUpTask(ServletContext context) {
  19. this.context=context;
  20. }
  21. public static boolean exportDatabaseTool(String userName, String password, String SID, String savePath, String fileName) throws InterruptedException {
  22. File saveFile = new File(savePath);
  23. if (!saveFile.exists()) {// 如果目录不存在
  24. saveFile.mkdirs();// 创建文件夹
  25. }
  26. try {
  27. Process process = Runtime.getRuntime().exec("exp " + userName + "/" + password + "@" + SID + " file=" + savePath + "/" + fileName + ".dmp");
  28. if(process.waitFor() == 0){//0 表示线程正常终止。
  29. return true;
  30. }
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. return false;
  35. }
  36. @Override
  37. public void run() {
  38. Format format = new SimpleDateFormat("yyyyMMdd");
  39. String filePathString="MJku"+format.format(new Date());
  40. try {
  41. if (exportDatabaseTool("rfxmujuku", "rfx", "orcl", "D:/MuJuKuDBBeiFen", filePathString)) {
  42. System.out.println("数据库成功备份!!!");
  43. } else {
  44. System.out.println("数据库备份失败!!!");
  45. }
  46. } catch (InterruptedException e) {
  47. e.printStackTrace();
  48. }
  49.  
  50. }
  51.  
  52. }

log4j资源文件

  1. log4j.rootLogger=debug, stdout ,R
  2.  
  3. ### stdout ###
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy\-MM\-dd HH\:mm\:ss}] %p (%F:%L) - %m%n
  7. ### R ###
  8. log4j.appender.R=org.apache.log4j.RollingFileAppender
  9. log4j.appender.R.File=D:/muju.log
  10. log4j.appender.R.MaxFileSize=100KB
  11. log4j.appender.R.MaxBackupIndex=5
  12.  
  13. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  14. log4j.appender.R.layout.ConversionPattern=[%d{yyyy\-MM\-dd HH\:mm\:ss}] %p %c - %m%n

日志初始化

  1. package com.rfx.servlet;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.ServletConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. import org.apache.commons.logging.Log;
  13. import org.apache.commons.logging.LogFactory;
  14. import org.apache.log4j.PropertyConfigurator;
  15.  
  16. /**
  17. * Servlet implementation class Log4jInitServlet
  18. */
  19. @WebServlet("/Log4jInitServlet.init")
  20. public class Log4jInitServlet extends HttpServlet {
  21. private static final long serialVersionUID = 1L;
  22. private final Log log = LogFactory.getLog(getClass());
  23. /**
  24. * @see HttpServlet#HttpServlet()
  25. */
  26. public Log4jInitServlet() {
  27. super();
  28. // TODO Auto-generated constructor stub
  29. }
  30. public void init() {
  31. String prefix = getServletContext().getRealPath("/");
  32. String file = getInitParameter("log4j");
  33.  
  34. if (file != null) {
  35. //System.out.println("log4j 初始化成功");
  36. log.info("log4j初始化成功");
  37. PropertyConfigurator.configure(prefix+ file);
  38. } else {
  39. log.info("log4j初始化失败");
  40. //System.out.println("log4j 初始化失败");
  41. }
  42.  
  43. }
  44.  
  45. }

自行导包

Java web 自动备份数据库和log4j日志的更多相关文章

  1. 在linux和windows下自动备份数据库

    摘要: 详细介绍在windows和linux下自动备份数据库的过程,希望可以让新手立即上手吧! 本文档内容共分为2大部分:linux和windows Linux和windows都分为:准备工作和操作阶 ...

  2. SQLServer2005利用维护计划自动备份数据库

    经常性忘了给数据库备份,结果当数据库发生问题的时候,才发现备份是1个月以前的,那个后悔与懊恼还加惭愧啊,别提有对难受了.要认为的记住去备份比较难,每天事情又那么多,所以有了这个自动备份就不用愁了.先拷 ...

  3. Sql Server自动备份数据库,定期删除备份

    //实现:每天自动备份数据库,定期删除备份 //步骤:[开始]--[所有程序]--[Microsoft SQL Server 2005]--[SQL Server Management Studio] ...

  4. SQL Server 定时自动备份数据库

    在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库,这篇文章介绍使用SQL Server 数据库代理中的作业定时自动备份数据库. 1.启动SQL Server代理服务,如下图: 绿色 ...

  5. MSSQL Express版本自动备份数据库

    由于Express版本的数据库没有自动备份数据库的功能,所以需要自己搭建好备份功能 一.具体原理: 1.利用SQL备份命令:Backup Database 2.使用sqlcmd执行备份命令 3.使用系 ...

  6. CentOS下使用crontab+mysqldump实现定时自动备份数据库

    一 : 为什么要进行数据库的备份? 最主要的原因:尽可能地减少损失,包括时间上.精神上和金钱上的损失.很多人都不注意备份数据,以致在发生问题后丢失大量的重要数据.要知道,在地球上网是很危险的,即使做好 ...

  7. php每天自动备份数据库

    php每天自动备份数据库 windows中如何添加计划任务? 前提:添加windows计划任务,每天打开备份数据库的页面.1.打开http://localhost/thinkphp3.2/index. ...

  8. SQL Server 2008、SQL Server 2008R2 自动备份数据库

    让SQL Server 2008自动备份数据库,需要建立一个SQL Server作业,并启动SQL Server代理,使该作业定期运行. 具体来说,可以按以下步骤进行: 一.打开SQL Server ...

  9. Navicat自动备份数据库

    @ 目录 Navicat自动备份数据库 备份与还原 修改备份位置 MySQL:5.7 Navicat:11 Windows10 重要数据库的定时备份是非常重要的,使用Navicat可以非常方便快捷地自 ...

随机推荐

  1. Java进阶--Java动态代理

    JDK version: 1.8 动态代理中所说的"动态", 是针对使用Java代码实际编写了代理类的"静态"代理而言的, 它的优势不在于省去了编写代理类那一点 ...

  2. C#文件反序列化

    前言 最近,为了实现Unity游戏数据的加密,我都把注意力放到了C#的加密方式身上,最简单的莫过于C#的序列化了,废话不多说,直接开始 准备工作 在使用文件反序列化前我们得先引用命名空间 using ...

  3. 56.Qt-滚动字幕之无间隙滚动(原创)

    1.描述 最近要实现一个滚动条字幕,但是搜到的系列文章都是利用定时器QTimer,在固定的时间截取文本并显示,这样滚动的时候其实是断断续续的,因为实际上是一个个字符位移实现的,不过实现方便. 所以只有 ...

  4. 如何实现 axios 的自定义适配器 adapter

    Axios 是一个非常优秀的基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.并且提供了很多便捷的功能,例如: 支持 Promise API 拦截请求和响应 转换请求数据和 ...

  5. Graph-GCN

    前言 在大型图中,节点的低维向量embedding被证明了作为各种各样的预测和图分析任务的特征输入是非常有用的.顶点embedding最基本的基本思想是使用降维技术从高维信息中提炼一个顶点的邻居信息, ...

  6. C# 中的只读结构体(readonly struct)

    翻译自 John Demetriou 2018年4月8日 的文章 <C# 7.2 – Let's Talk About Readonly Structs>[1] 在本文中,我们来聊一聊从 ...

  7. ArcPy批量选择指定属性的要素

    在GIS数据处理中,选择数据是十分频繁的操作,常用的是"按属性选择"和"按位置选择",这两个功能虽然比较强大,但有时也不能满足实际需求.比如可能时常会遇到这样一 ...

  8. Day12 HTML知识

    1.html初识 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器按顺序渲染网页文件,然后根 ...

  9. MySQL安装及安装问题解答(二)

    在安装过程中难免会有一些异常情况出现,笔者对一部分异常情况做出解答以供参考 1.MySQL未能成功启动 在输入net start mysql后提示 MySQL 服务正在启动, MySQL 服务无法启动 ...

  10. .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)

    什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...