java Timer定时器 非周末开始工作

渔樵耕读 发布于 2013/03/06 16:29
阅读 396
收藏 2

在j2ee 中写一个定时器。

在项目启动的时候,启动定时器,执行一些数据库操作。

我的问题是 定时器可以设置在非周末的时候工作么?定时器可以根据不同的时间条件来工作么?

下面是一些源码

package com.jit.util;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class KQServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public KQServlet() {
		super();
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req, resp);
	}

	@Override
	public void destroy() {
		super.destroy();
	}

	@Override
	public void init() throws ServletException {
		// 启动定时器
		System.out.println("启动定时器");
		String hour = (String) this.getServletConfig().getInitParameter("Time");
		new KQTaskManager(hour);
	}

}
package com.jit.util;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class KQTaskManager {
	private static final long PERIOD_DAY = 1000 * 60 * 60 * 24;

	public KQTaskManager(String hour) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(hour));
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
		
			Date date = cal.getTime();
			// 如果第一次执行定时任务的时间 小于 当前的时间
			// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行
			if (date.before(new Date())) {
				date = this.addDay(date, 1);
			}
			Timer timer = new Timer();
			// 将任务实例化
			KQTask task = new KQTask();
			// 将任务装载到任务调度中
			System.out.println("将任务装载到任务调度中!!");
			if(weekDay != 0 && weekDay != 6){
				timer.schedule(task, date, PERIOD_DAY);
			}
		
	}

	// 增加减少天数
	public Date addDay(Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_MONTH, num);
		return cal.getTime();
	}
}
不知道各位看官 听懂小弟的问题了么?


以下是问题补充:

@渔樵耕读:难道是这样?? int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; if(weekDay != 0 && weekDay !=6){ Date date = cal.getTime(); } /. . . ./ timer.schedule(task, date, PERIOD_DAY); (2013/03/06 16:36)
加载中
0
渔樵耕读
渔樵耕读
自己搞定 在TimerTask 的run()中做时间条件的判断    
0
夜长无尽
夜长无尽

计划任务是用 的比较多的。

基本上我们这的数据库一些操作都用计划任务。

渔樵耕读
渔樵耕读
用oralce 的job 是吧? 我之前想这么做了不过 因为我对PL/SQL 不是很熟。 还是用java吧。 以后慢慢学习:D 谢谢提醒。
0
石头哥哥
石头哥哥
可否考虑quartz 呢?
返回顶部
顶部