项目中用到一个定时器来备份数据。。 假如我设置为11点来执行这个任务当工程重启时,如果现在还没到11点 那么这个任务就不会执行。如果过了11点,那么定个定时器就会执行。现在想让定时器启动不执行,到了规定的时间再执行。
怎么搞 代码如下。
public class TaskManager implements ServletContextListener {
/**
* 每天的毫秒数
*/
public static final long PERIOD_DAY = 10;
/**
* 一周内的毫秒数
*/
public static final long PERIOD_WEEK = PERIOD_DAY * 7;
/**
* 无延迟
*/
public static final long NO_DELAY = 0;
/**
* 定时器
*/
private Timer timer;
/**
* 在Web应用启动时初始化任务
*/
public void contextInitialized(ServletContextEvent event) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11); //控制时
calendar.set(Calendar.MINUTE, 45); //控制分
calendar.set(Calendar.SECOND, 0); //控制秒
Date date = calendar.getTime();
//定义定时器
timer = new Timer("数据库表备份",true);
//启动备份任务
timer.schedule(new BackUpTableTask(), date);
}
/**
* 在Web应用结束时停止任务
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定时器销毁
}
} public class BackUpTableTask extends TimerTask {
private static Log log = LogFactory.getLog(BackUpTableTask.class);
private static boolean isRunning = false;
public void run() {
if (!isRunning) {
isRunning = true;
log.debug("开始执行任务..."); //开始任务
System.out.println("do work --------------------------");
System.out.println("work down;");
// try {
// DataSource ds = com.aebiz.pub.util.DBUtil.getDataSource();
// try {
// new AccountCheck(ds).getAccountFile();
// } catch (Exception e) {
// e.printStackTrace();
// }
// } catch (NamingException e) {
// e.printStackTrace();
// }
//working add what you want to do
log.debug("执行任务完成..."); //任务完成
isRunning = false;
} else {
log.debug("上一次任务执行还未结束..."); //上一次任务执行还未结束
System.out.println("任务没执行");
}
}
} web.xml如下 :<listener>
<listener-class>com.test.dao.impl.TaskManager</listener-class>
</listener>
现在的问题是 如果 工程重启,没到11点,那么这个定时器不会执行,如果过了11点,那么这个定时器,就会执行现在想让他启动后不执行。
怎么搞 代码如下。
public class TaskManager implements ServletContextListener {
/**
* 每天的毫秒数
*/
public static final long PERIOD_DAY = 10;
/**
* 一周内的毫秒数
*/
public static final long PERIOD_WEEK = PERIOD_DAY * 7;
/**
* 无延迟
*/
public static final long NO_DELAY = 0;
/**
* 定时器
*/
private Timer timer;
/**
* 在Web应用启动时初始化任务
*/
public void contextInitialized(ServletContextEvent event) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11); //控制时
calendar.set(Calendar.MINUTE, 45); //控制分
calendar.set(Calendar.SECOND, 0); //控制秒
Date date = calendar.getTime();
//定义定时器
timer = new Timer("数据库表备份",true);
//启动备份任务
timer.schedule(new BackUpTableTask(), date);
}
/**
* 在Web应用结束时停止任务
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定时器销毁
}
} public class BackUpTableTask extends TimerTask {
private static Log log = LogFactory.getLog(BackUpTableTask.class);
private static boolean isRunning = false;
public void run() {
if (!isRunning) {
isRunning = true;
log.debug("开始执行任务..."); //开始任务
System.out.println("do work --------------------------");
System.out.println("work down;");
// try {
// DataSource ds = com.aebiz.pub.util.DBUtil.getDataSource();
// try {
// new AccountCheck(ds).getAccountFile();
// } catch (Exception e) {
// e.printStackTrace();
// }
// } catch (NamingException e) {
// e.printStackTrace();
// }
//working add what you want to do
log.debug("执行任务完成..."); //任务完成
isRunning = false;
} else {
log.debug("上一次任务执行还未结束..."); //上一次任务执行还未结束
System.out.println("任务没执行");
}
}
} web.xml如下 :<listener>
<listener-class>com.test.dao.impl.TaskManager</listener-class>
</listener>
现在的问题是 如果 工程重启,没到11点,那么这个定时器不会执行,如果过了11点,那么这个定时器,就会执行现在想让他启动后不执行。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货