struts1中使用quartz

来源:互联网 发布:淘宝内衣买家秀木耳 编辑:程序博客网 时间:2024/06/07 08:47

参考网上一些资料,写了一个demo,主要实现在web应用启动时,根据数据库中保存的job信息,启动所有job。在此仅列出quartz相关类代码。

源码免积分下载:http://download.csdn.net/detail/daxiang12092205/8008505

JobMainStart.java:

package com.xy6.quartzweb.job;import java.util.Date;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;import com.xy6.quartzweb.JobDAO;import com.xy6.quartzweb.JobForm;/* * 作者:daxiang * 日期:2014-10-06 * 功能:启动所有job的主入口,在web启动时,调用该类init方法。  */public class JobMainStart extends HttpServlet {private static final long serialVersionUID = 1L;public void init() throws ServletException {this.startJobProc();this.startJobClass();}/* * 启动所有调度对象为java类的job */private void startJobClass(){// 获取调度对象为java类的job列表// 遍历// 调用startRunClassJobDAO objJobDAO = new JobDAO();String strSQL = "select * from test_zl_job where job_target_type = 1";List<JobForm> listJobForm = objJobDAO.queryJobList(strSQL);for(JobForm jobForm : listJobForm){this.startRunClass(jobForm);}System.out.println("---定时调度类启动");}/* * 启动所有调度对象为存储过程的job */private void startJobProc(){// 获取调度对象为存储过程的job列表// 遍历// 调用startRunProcJobDAO objJobDAO = new JobDAO();String strSQL = "select * from test_zl_job where job_target_type = 0";List<JobForm> listJobForm = objJobDAO.queryJobList(strSQL);for(JobForm jobForm : listJobForm){this.startRunProc(jobForm);}System.out.println("---定时存储过程类启动");}/* * 根据job信息,启动调度对象为java类的job */private void startRunClass(JobForm objJobForm){Class<?> targetClass = null;try{targetClass = Class.forName(objJobForm.getJobTarget());// 1、创建JobDetial对象JobDetail jobDetail = new JobDetail();jobDetail.setJobClass(targetClass);jobDetail.setName(objJobForm.getJobName());jobDetail.setGroup(objJobForm.getJobGroupName());// 2、创建CronTrigger对象CronTrigger cTrigger = new CronTrigger();cTrigger.setName(objJobForm.getTriggerName());cTrigger.setGroup(objJobForm.getTriggerGroupName());cTrigger.setCronExpression(objJobForm.getTriggerCronExp());cTrigger.setStartTime(new Date());// 3、创建Scheduler对象,并配置JobDetail和Trigger对象SchedulerFactory sf = new StdSchedulerFactory();Scheduler scheduler = null;scheduler = sf.getScheduler();scheduler.scheduleJob(jobDetail, cTrigger);// 4、并执行启动、关闭等操作scheduler.start();// 5、操作job的方法// 删除一个任务scheduler.deleteJob("b", "jobgroup2");// 停止一个任务scheduler.unscheduleJob("c", "c");// 暂停一个任务scheduler.pauseJob("a", "jobgroup1");// 重启一个任务//scheduler.resumeJob("a", "jobgroup1");} catch(Exception ex){ex.printStackTrace();}}/* * 根据job信息,启动调度对象为存储过程的的job */private void startRunProc(JobForm objJobForm){try{// 1、创建JobDetial对象JobDetail jobDetail = new JobDetail();jobDetail.setJobClass(JobExecProc.class);jobDetail.setName(objJobForm.getJobName());jobDetail.setGroup(objJobForm.getJobGroupName());jobDetail.getJobDataMap().put("strProcName", objJobForm.getJobTarget());// 2、创建CronTrigger对象CronTrigger cTrigger = new CronTrigger();cTrigger.setName(objJobForm.getTriggerName());cTrigger.setGroup(objJobForm.getTriggerGroupName());cTrigger.setCronExpression(objJobForm.getTriggerCronExp());cTrigger.setStartTime(new Date());// 3、创建Scheduler对象,并配置JobDetail和Trigger对象SchedulerFactory sf = new StdSchedulerFactory();Scheduler scheduler = null;scheduler = sf.getScheduler();scheduler.scheduleJob(jobDetail, cTrigger);// 4、并执行启动、关闭等操作scheduler.start();} catch(Exception ex){ex.printStackTrace();}}}

JobExecProc.java:

package com.xy6.quartzweb.job;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import com.xy6.quartzweb.JobDAO;import com.xy6.quartzweb.JobUtil;/* * 作者:daxiang * 日期:2014-10-06 * 功能:调度对象为存储过程的job实现类,每次执行job时,即运行该类execute方法  */public class JobExecProc implements Job {public void execute(JobExecutionContext arg0) throws JobExecutionException {// 获取存储过程列表// 调用所有的存储过程JobDAO objJobDAO = new JobDAO();JobDataMap mapData = arg0.getJobDetail().getJobDataMap();// 获取从调用处传入的参数:存储过程名称String strProcName = mapData.getString("strProcName");String strCallProc = "{call " + strProcName + "()}";System.out.println("---" + strCallProc + "," + JobUtil.getCurTime());objJobDAO.opeateDateBase(strCallProc);}}

JobOutHello.java:

package com.xy6.quartzweb.job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.StatefulJob;import com.xy6.quartzweb.JobUtil;/* * 作者:daxiang * 日期:2014-10-06 * 功能:调度对象为JobOutHello的job实现类,每次执行job时,输出hello等字符  */public class JobOutHello implements StatefulJob {public void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("---hello," + JobUtil.getCurTime());}}

JobAction.java:

package com.xy6.quartzweb;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;/* * 作者:daxiang * 日期:2014-10-06 * 功能:job主列表action类 */public class JobAction extends Action {private static final long serialVersionUID = 1L;private final JobDAO objJobDAO = new JobDAO();@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {JobForm objJobForm = (JobForm)form;String strActionType = objJobForm.getActionType();if(StringUtils.isBlank(strActionType)){List<JobForm> listJobForm = this.readJobList("");request.setAttribute("list", listJobForm);} else if("delete".equals(strActionType)){if(this.deleteJob(objJobForm) > 0){objJobForm.setActionMessage("删除成功");} else{objJobForm.setActionMessage("删除失败");}List<JobForm> listJobForm = this.readJobList("");request.setAttribute("list", listJobForm);}ActionForward forward = new ActionForward();forward = mapping.findForward("success");return forward;// 编写action,实现读取、新增、修改、删除方法// 修改VO// 修改DAO// 修改xml文件// 编写jsp页面,列表页,编辑页面}private List<JobForm> readJobList(String strJobId){String strSQL = "select * from test_zl_job ";if(StringUtils.isNotEmpty(strJobId)){strSQL += "where job_id = '" + strJobId + "'"; }List<JobForm> listJobForm = objJobDAO.queryJobList(strSQL);this.refreshJobState(listJobForm);return listJobForm;}private int deleteJob(JobForm objJobForm){return objJobDAO.deleteDataBase(objJobForm);}private void refreshJobState(List<JobForm> listJobForm){SchedulerFactory sf = new StdSchedulerFactory();Scheduler scheduler = null;try{scheduler = sf.getScheduler();String strState = "";for(JobForm jobForm : listJobForm){// 根据定时器名称,定时器组名获取定时器状态,即job的状态int iTriggerState = scheduler.getTriggerState(jobForm.getTriggerName(),jobForm.getTriggerGroupName()); strState = JobUtil.getTriggerState(iTriggerState);jobForm.setJobStatus(strState);}} catch(Exception ex){ex.printStackTrace();}}}


web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    version="2.4"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>2</param-value></init-param><init-param><param-name>detail</param-name><param-value>2</param-value></init-param><init-param><param-name>application</param-name><param-value>ApplicationResources</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>start job schedule</servlet-name><servlet-class>com.xy6.quartzweb.job.JobMainStart</servlet-class><load-on-startup>2</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><welcome-file-list><welcome-file>JobList.jsp</welcome-file></welcome-file-list><jsp-config><taglib><taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri><taglib-location>/WEB-INF/struts-bean.tld</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/struts-html.tld</taglib-uri><taglib-location>/WEB-INF/struts-html.tld</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri><taglib-location>/WEB-INF/struts-logic.tld</taglib-location></taglib></jsp-config></web-app>
难点:

程序启动时,开始定时调用存储过程(开始不知道quartz有传参功能,卡了好久,后经朋友指点,秒杀);

主列表中展示job当前的状态(开始一直想着找job的state,而没有找trigger的state,方向错了,trigger的state其实就是job的state);

0 0
原创粉丝点击