java中的定时器

 一、建立定时器控制类

 * @文件名称:SysTimerTask
 * @文件标识:SysTimerTask
 * @摘要: 定时器控制类
 *---------------------------------------
 *@当前版本:1.0
 *---------------------------------------

package com.siit.util;i
import java.util.Date;
import java.util.Timer;i
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.siit.pojo.TConfigInfo;
import com.siit.webServices.DataAccess.ConfigInfoDataAccess;
public class SysTimerTask implements ServletContextListener {
 
 private Timer timer = null;
 //系统时间
 public Date SYSTEM_DATE = null;
 public void contextDestroyed(ServletContextEvent event) 
 {
  timer.cancel();
  event.getServletContext().log("定时器销毁");
  System.out.println("定时器销毁");
 }
 /**
  * 初始化监听器(在tomcat启动的时候监听器启动)
  * 以下是实现定时器功能
  * @param 0表示任务无延迟、执行间隔从配置表读取
  * */
 public void contextInitialized(ServletContextEvent event)
 { 
  timer = new Timer(true);
  //添加日志,可在tomcat日志中查看到
  event.getServletContext().log("定时器已启动"); 
  System.out.println("定时器启动");
  
  // 数据库配置的开关
  timeConfig = new ConfigInfoDataAccess().findConfigByKey("importHeadPortrAction");
  if(timeConfig != null)
  {
   if(!"0".equals(timeConfig.getRange()))
   {
    //读取数据库定时器配置操作时间
    long dateTime = Long.parseLong(timeConfig.getRange()) *60 *1000; //6*60*1000L  6分钟执行一次
    //调用定时器方法
    timer.schedule(new SysHeadPortrImportBean(event.getServletContext()), 0, dateTime);
   }
  }
 }
}

 

 

二、在web.xml中需要配置要启动的定时器

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns=""
 xmlns:xsi="" version="2.4"
 xsi:schemaLocation="   ">


 <listener>
  <listener-class>com.siit.util.SysTimerTask</listener-class>
 </listener>


</web-app>

 

 

三、建立定时器实例操作类

 * @文件名称:SysHeadPortrImportBean 
 * @文件标识:SysHeadPortrImportBean 
 * @摘要: 定时器实例操作类
 *---------------------------------------
 *@当前版本:1.0
 *---------------------------------------

package com.siit.util;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import org.apache.log4j.Logger;
import com.siit.dao.TIdentitycardDAO;
import com.siit.pojo.TConfigInfo;
import com.siit.webServices.DataAccess.ConfigInfoDataAccess;
public class SysHeadPortrImportBean extends TimerTask{
  
 private static Logger logger = Logger.getLogger(SysHeadPortrImportBean.class.getName());
 
 @SuppressWarnings("unused")
 private ServletContext context = null;
 public SysHeadPortrImportBean(ServletContext context)
 {
  this.context = context;
 }
 
 // 读取某个文件夹下的所有文件
 public static boolean readImage(String filePath) {
        File directory = new File(filePath);
        File[] files = directory.listFiles();
        if(files == null){
         logger.info("客户头像的目录路径:"+filePath+"不存在!"); 
         System.out.println("客户头像的目录路径:"+filePath+"不存在!");
         return false;
        }
        if(files.length==0){
         logger.info("需要导入的客户头像文件总数:0个,目录中没有文件!");
            System.out.println("需要导入的客户头像文件总数:0个,目录中没有文件!");
         return false;
        }
        logger.info("客户头像的目录路径:"+filePath);
        System.out.println("客户头像的目录路径:"+filePath);
        logger.info("需要导入的客户头像文件总数:"+files.length+"个");
        System.out.println("需要导入的客户头像文件总数:"+files.length+"个");
        
        String[] temp = new String[2];
        List<String[]> cardExistList = new ArrayList<String[]>();
        List<String[]> cardNoexistList = new ArrayList<String[]>();
        TIdentitycardDAO idCardDao = new TIdentitycardDAO();
        for (int i = 0; i < files.length; i++) {
         System.out.println("文件名称:"+files[i].getName());
         temp = files[i].getName().substring(0,files[i].getName().lastIndexOf(".")).split("_");
         // 根据身份证编码,查找对应的身份证记录
         int cardId = idCardDao.findIdCardByCode(temp[0]); 
         String[] cardMobilePath = new String[3];
         if(cardId!=0){// 存在
          cardMobilePath[0] = String.valueOf(cardId);  // cardId
          cardMobilePath[1] = temp[1];      // mobile
          cardMobilePath[2] = filePath+"/"+ files[i].getName(); // imagePath
          cardExistList.add(cardMobilePath);
         }else{// 不存在
          cardMobilePath[0] = temp[0];      // idCode
          cardMobilePath[1] = temp[1];      // mobile
          cardMobilePath[2] = filePath+"/"+ files[i].getName(); // imagePath
          cardNoexistList.add(cardMobilePath);
         }
         
      //分批次进行操作
         if ( i % 100 == 0 && i!=0) {
          if(cardNoexistList!=null && cardNoexistList.size()>0){
           // 在身份证表中不存在的身份证,先保存身份证
           List<String[]> cardList = idCardDao.saveIdCardByCardList(cardNoexistList);
           // 保存成功后,在cardExistList中添加返回的List
           if(cardList!=null && cardList.size() > 0){
               cardExistList.addAll(cardList);
              }
           //清理
           cardNoexistList.clear();
           cardList.clear();
          }
          
          // 将所有记录保存到日志操作表
          if(cardExistList!=null && cardExistList.size()>0){
           int saveFlag = idCardDao.saveQueuenumber(cardExistList);
           cardExistList.clear();
           logger.info("成功导入:"+saveFlag+"条客户头像!");
           System.out.println("成功导入:"+saveFlag+"条客户头像!");
          }
         }
         
        }   
        
        if(cardNoexistList!=null && cardNoexistList.size()>0){
   // 在身份证表中不存在的身份证,先保存身份证
   List<String[]> cardList = idCardDao.saveIdCardByCardList(cardNoexistList);
   // 保存成功后,在cardExistList中添加返回的List
   if(cardList!=null && cardList.size() > 0){
       cardExistList.addAll(cardList);
      }
   //清理
   cardNoexistList.clear();
   cardList.clear();
  }
  
  // 将所有记录保存到日志操作表
  if(cardExistList!=null && cardExistList.size()>0){
   int saveFlag = idCardDao.saveQueuenumber(cardExistList);
   cardExistList.clear();
   logger.info("成功导入:"+saveFlag+"条客户头像!");
   System.out.println("成功导入:"+saveFlag+"条客户头像!");
  }
        
        return true;
 }
 
 public void run() {
  TConfigInfo timeConfig = new ConfigInfoDataAccess().findConfigByKey("importHeadPortrAction");
  if(timeConfig != null)
  {
   if(!"0".equals(timeConfig.getRange()))
   {
    logger.info("To the database import customers HeadPortr, Begin-----");
    System.out.println("To the database import customers HeadPortr, Begin-----");
    timeConfig = new ConfigInfoDataAccess().findConfigByKey("directoryStr");
    String directoryStr = timeConfig.getRange(); 
    readImage(directoryStr);
    logger.info("To the database import customers HeadPortr, End-----");
    System.out.println("To the database import customers HeadPortr, End-----");
    //关闭导入客户头像的开关
    new ConfigInfoDataAccess().editConfigByKey("importHeadPortrAction");
   }
  }
 } 
}

你可能感兴趣的:(java中的定时器)