java中timer在web.xml中的一个例子

本文介绍了一个基于Java的定时任务实现方案,通过扩展TimerTask来定期执行数据库操作,并结合HttpServlet实现在Web应用中自动启动该任务。文章详细展示了如何创建定时任务类、配置Web应用及实现自动更新数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分三步

一、定时执行的任务类Daemon

二、扩展HttpServlet的servlet

三、配置web.xml文件

细节如下:

一、定时执行的任务类Daemon

 

package com.resoft.recis.common.timer;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletException;

/**
 * Function:
 * User     : zxs_9999
 * Date      : 
 
*/

public class Daemon {
    
private static final Timer timer = new Timer();
    
    
// private static String sDBDriver = "com.ibm.db2.jcc.DB2Driver";
// private static String url="jdbc:db2://127.0.0.1:50000/test"; 
// private static String user="db2"; 
// private static String password="db2";     
 private static String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
 
private static String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test"
 
private static String user="sql"
 
private static String password="sql"
 
 
 
private static Connection conn = null
 
private static ResultSet rs = null


 
static{
  
try 
   Class.forName(sDBDriver); 
   
  }
catch(java.lang.ClassNotFoundException e){
   System.out.println(
"in Jdbc() , ClassNotFoundException");
   e.printStackTrace(); 
  }
catch(Exception e){
   System.out.println(
"in Jdbc() , after ClassNotFoundException's Exception");
   e.printStackTrace(); 
  }

 }

 
public static void start(){

  timer.scheduleAtFixedRate(
new TimerTask(){
  
   
public void run(){
             Calendar calendar 
= Calendar.getInstance();
             
int hour = calendar.get(Calendar.HOUR_OF_DAY);
             System.out.println(
"run hour: "+hour);
             
//20点以后再执行
             if(hour>=20 && hour<=22){

     ResultSet RS 
= executeQuery("SELECT * FROM OrgMng"); 
     Date workdate
=null
     
try {
      rs.next();
      workdate
=rs.getDate("workdate");
      RS.close();
      executeUpdate(
"update OrgMng set workdate ='"+changeDate(workdate)+"'");
     }
 catch (Exception e) {
      
// TODO: handle exception
      System.out.println("in start() , Exception");
      e.printStackTrace();
     }

             }
   
   }

   
  }
 
  ,
0,1000*60*60*2);//两个小时1000*60*60*2 自动执行一次
  System.out.println("timer 自动更新日期程序启动...");
 }

 
 
public static ResultSet executeQuery(String sql) {
  rs 
= null
  
try {  
  conn
= DriverManager.getConnection(url,user,password);
  Statement stmt 
= conn.createStatement(); 
  rs 
= stmt.executeQuery(sql); 
  }
catch(SQLException ex) 
   System.out.println(
"in executeQuery , SQLException");
   ex.printStackTrace();
  }
catch(Exception e){
   System.out.println(
"in executeQuery , after SQLException's Exception");
   e.printStackTrace();
  }

  
return rs; 
 }

 
 
public static void executeUpdate(String sql) {
  
try 
  
//conn = DriverManager.getConnection(url); 
  conn= DriverManager.getConnection(url,user,password);
  Statement stmt 
= conn.createStatement(); 
  stmt.executeUpdate(sql); 
  }
catch(SQLException ex) {
   System.out.println(
"in executeUpdate , SQLException");
   ex.printStackTrace();
  }
catch(Exception e){
   System.out.println(
"in executeUpdate , after SQLException's Exception");
   e.printStackTrace();
  }

 }

 
 
public static String changeDate(Date workdate){
    String temp
=null;
     
try{
         SimpleDateFormat sdf 
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Calendar calendar
=Calendar.getInstance();
         calendar.setTime(workdate);
         calendar.add(Calendar.DATE, 
1);
        temp
=sdf.format(calendar.getTime());
        System.out.println(
"workdate is "+temp);
       }
catch(Exception e){
        System.out.println(
"in changeDate ,Exception");
        e.printStackTrace();
       }

  
return temp;
   }

    
    
public static void main(String[] args) throws ServletException {
     Daemon.start();

    }

}


 

二、扩展HttpServlet的servlet

 

package com.resoft.recis.common.timer;

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;

/**
 * User: zxs_9999
 * Date: 
 * Time:
 
*/

public class HttpImportDaemon extends HttpServlet{
    
public void init() throws ServletException {
        Daemon.start();
    }


}


 

三、配置web.xml文件

 

 <servlet>
  
<servlet-name>workdate</servlet-name>
  
<display-name>chage workdate</display-name>
  
<servlet-class>
   com.resoft.recis.common.timer.HttpImportDaemon
  
</servlet-class>
  
<load-on-startup />
 
</servlet>

 
<servlet-mapping>
  
<servlet-name>workdate</servlet-name>
  
<url-pattern>/*</url-pattern>
 
</servlet-mapping>

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周易宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值