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);
}
}