web应用中的调度——简介

来源:互联网 发布:mac安装hexo 编辑:程序博客网 时间:2024/05/18 07:50

首先,任务调度的思想就是: 设置一个任务,使容器在指定的时间,及指定的时间间隔一次或多次的做这个任务。

实现的方式是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);@Overridepublic 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






0 0
原创粉丝点击