用一个线程控制一个事务执行

1.项目启动会执行该线程,然后这个线程控制执行一个事务

1.项目用的struts2+spring   再web.xml添加监听


     <listener>
<listener-class>cn.cntomorrow.jzsh.timerThead.Handle</listener-class>
</listener>


2.


package cn.cntomorrow.jzsh.timerThead;
import java.text.ParseException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/****
 * 项目自启动程序入口
 * @author yweiwei
 */
public class Handle implements ServletContextListener,
HttpSessionListener, ServletRequestListener{
   public void contextDestroyed(ServletContextEvent arg0) {  
   }  
  /***
   * 创建监听程序:项目启动即自启动此程序
   */
   public void contextInitialized(ServletContextEvent arg0) {  
    for(int i=0;i<5;i++){
System.out.println("==============线程开始启动==================");
}
   
    TheadContrl t=new TheadContrl();
    try {
    //调用执行的方法
t.createsite();
} catch (ParseException e) {
e.printStackTrace();
}
   }  
  
   public void sessionCreated(HttpSessionEvent arg0) {  
   }  
  
   public void sessionDestroyed(HttpSessionEvent arg0) {  
   }  
  
   public void requestDestroyed(ServletRequestEvent arg0) {  
   }  
  
   public void requestInitialized(ServletRequestEvent arg0) {  
   }  

}


3.


package cn.cntomorrow.jzsh.timerThead;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import mt.framework.util.Logger;
import org.apache.commons.collections.map.ListOrderedMap;


import cn.cntomorrow.jzsh.ws.action.JzshAction;
/***
 * 线程管理类 
 * @author  yweiwei
 */
public class TheadContrl   {
private TaskDo taskdo = new TaskDo();
//创建一个线程池
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
public void createsite() throws ParseException{
// 一天的毫秒数
long daySpan = 24 * 60 * 60 * 1000;
// 规定的每天时间15:33:30运行
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '11:00:00'");
// 首次运行时间
Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
// 如果今天的已经过了 首次运行时间就改为明天
if(System.currentTimeMillis() > startTime.getTime())
 startTime = new Date(startTime.getTime() + daySpan);
 Timer t = new Timer();
 TimerTask task = new TimerTask(){
 @Override
 public void run() {
  // 要执行的代码
  String sitecode="1";
           String s="2";
          Logger.info("线程:执行一次jzsh增量开始");
           try {
            /***
            * 先推送删除基站信息
            */
          List<ListOrderedMap>    rlist = taskdo.selectdeleteBaseInfo(s);//查询删除的基站  参数2作为查询删除基站的条件
          for (int i=0;i<rlist.size();i++) {
        //得到删除的基站id
String n=(String) rlist.get(i).get("BASESTATION_ID");
   JzshAction jzsh=new JzshAction();
          jzsh.createsite(n,n);//查询删除基站
  }
          //查询增加的基站
         rlist = taskdo.selectBaseInfo(sitecode);
          for (int i=0;i<rlist.size();i++) {
String m=(String) rlist.get(i).get("BASESTATION_ID");
   JzshAction jzsh=new JzshAction();
          jzsh.createsite(m);
  }
            System.gc();
               Thread.sleep(2000);
           }catch (InterruptedException e) {
               e.printStackTrace();
           }catch (Exception e){
            e.printStackTrace();
           }
           Logger.info("线程:执行一次jzsh增量结束");
 }
};
// 以每24小时执行一次
t.scheduleAtFixedRate(task, startTime, daySpan);
}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值