首先,任务调度的思想就是: 设置一个任务,使容器在指定的时间,及指定的时间间隔一次或多次的做这个任务。
实现的方式是java的定时器(也有用触发器的)。在servlet里面设置一个定时器,让该定时器在容器开始运行的时候就设置好,然后就是设置定时任务,在定时任务中完成自己的任务。
web.xml配置:
<servlet>
<servlet-name>DutyRemindUtil</servlet-name>
<servlet-class>com.xxx.xxxx.web.xx.xx.dutyMg.util.DutyRemindServlet</servlet-class>
<init-param>
<param-name>startTask</param-name> <!-- 设置servlet初始参数 -->
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>intervalTime</param-name>
<param-value>1</param-value>
</init-param>
<load-on-startup>20</load-on-startup> <!-- load-on-startup设置servlet的优先级 -->
</servlet>
servlet :
<pre name="code" class="java">public class DutyRemindServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private Timer DutyRemindTimer = null;
private TimerTask DutyRemindTimerTask = null;
public DutyRemindServlet(){
super();
}
public void destroy(){
super.destroy();
if(DutyRemindTimer != null){
DutyRemindTimer.cancel();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
super.doGet(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
super.doPost(request, response);
}
public void init(ServletConfig config)throws ServletException {
super.init(config);
String startTask = getInitParameter("startTask");
Long intervalTime = Long.parseLong(getInitParameter("intervalTime"));
Date now = new Date();
@SuppressWarnings("deprecation")
Date target = new Date(now.getYear(),now.getMonth(),now.getDate(),00,05,00);
// 启动定时器
if(startTask.equals("true")){
DutyRemindTimer = new Timer();
DutyRemindTimerTask =new DutyRemindTimerTask();
// DutyRemindTimer.schedule(DutyRemindTimerTask, target, intervalTime * 60 * 60 * 24 * 1000);
DutyRemindTimer.scheduleAtFixedRate(DutyRemindTimerTask, target, intervalTime * 60 * 60 * 24 * 1000);
}
}
}
调度任务class(继承自 TimerTask 类):
public class DutyRemindTimerTask extends TimerTask{
Log Logger = LogFactory.getLog(DutyRemindTimerTask.class);
@Override
public void run(){
ResponseObject result = ServiceUtils.invoke("component:oa/dutyMg.daily.dutyRemind", "setDutyRemind", null); //调度任务
Logger.debug("值班人员通知:已发出"+result.getResult()+"条消息");
}
}
关于java Timer的使用可以参考一下链接:http://www.cnblogs.com/yank/p/3955322.html