专注于高品质PHP技术等信息服务于一体 [STIEMAP] [RSS]

百度提供的广告:
java
当前位置:首页 > 技术文档 > java >  > 
JSP自动定时备份数据库

 

JSP自动定时备份数据库
Jsp中 Servlet 是一个单例的处理Request Response的进程。
现在的要求是:管理员可以设置数据库定时自动备份,浏览器关掉后还可以自动备份。这点比PHP要简单不少。
下面案例:
public class Test extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response){
  while(true){
  try {
   PrintWriter pw=new PrintWriter("d:/jsp_make.txt");
   java.text.SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ms");
   String nowTimeStr = fmt.format(new Date());
   pw.println(nowTimeStr);
   pw.close();
   Thread.sleep(3000);
  } catch (Exception e) {
   e.printStackTrace();
  }}
 }

}
使用浏览器访问一下,然后把浏览器关掉,看生成的jsp_make.txt 里面的值在不变改变。

可是有一个问题,而目前这个问题在PHP中还没有办法解决,而JSP中可以轻松解决,这个问题是,当管理员访问这个 servlet 或是 .php后浏览器进行假死状态。这个问题是因为,有一个死循环在执行,所以会出现假死。PHP不支持多线程,自然没有什么好的方法。不过Java有好的解决方法,对 自动定时程序进行多线程处理另开一个线程来运行,就不会出现假死的问题了。
在Java中实现多线程的方法有两种,一实现 Runnable 接口,二继承 Thread 两者都要实现 run() 方法。
我这里是一个 servlet 本身就已经继承 HttpServlet 所以在这里实现Runnable 接口比较简单。
 
把 while死循环中的代码放到 run() 方法中。
修改后完整代码:
public class Test extends HttpServlet implements Runnable{

 public void doGet(HttpServletRequest request, HttpServletResponse response){
  //使用多线程编程
  new Thread(new Test()).start();
  
 }


 public void run() {
  while(true){
   try {
    PrintWriter pw=new PrintWriter("d:/jsp_make.txt");
    java.text.SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ms");
    String nowTimeStr = fmt.format(new Date());
    pw.println(nowTimeStr);
    pw.close();
    Thread.sleep(3000);
   } catch (Exception e) {
    e.printStackTrace();
   }}
  
 }

}

好了,这下浏览器不会假死了。