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

在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();
	}
}
不知道各位看官 听懂小弟的问题了么?


<无标签>
举报
渔樵耕读
发帖于5年前 5回/382阅

以下是问题补充:

  • @渔樵耕读 :难道是这样?? int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; if(weekDay != 0 && weekDay !=6){ Date date = cal.getTime(); } /. . . ./ timer.schedule(task, date, PERIOD_DAY); (5年前)
顶部