Quartz调度实践
来源:互联网 发布:纯js省市区三级联动 编辑:程序博客网 时间:2024/04/29 05:00
一个典型的quartz调度做法(不结合spring)
首先声明一个类继承Job接口,将来quartz会调度这个类的executepublic class UpdateConfigurationTask implements Job{public void execute(JobExecutionContext context) throws JobExecutionException {try{if(!ClientManager.hasInit()){ClientManager.init();}ClientManager.updateConfig();}catch(Exception ex){LogWriter.writeErrorLog("从统一配置平台更新配置失败"+ex.getMessage());}}}
定义JobDetail,用以设置Job的各种属性
JobDetail jobDetail = new JobDetail("updateConfigurationTask","jGroup1", UpdateConfigurationTask.class);
定义一个Trigger
SimpleTrigger simpleTrigger = new SimpleTrigger("ConfigurationCenterTrigger","group1");
设置trigger的属性,主要是运行周期,时间,间隔等
simpleTrigger.setStartTime(new Date());simpleTrigger.setRepeatInterval(150000);simpleTrigger.setRepeatCount(org.quartz.SimpleTrigger.REPEAT_INDEFINITELY);
从SchedulerFactory获取一个Scheduler对象
SchedulerFactory schedulerFactory = new StdSchedulerFactory();Scheduler scheduler = schedulerFactory.getScheduler();
使用定义的Trigger调度定义的JobDetail
scheduler.scheduleJob(jobDetail, simpleTrigger);scheduler.start();
那么Spring是如何做的呢
首先依然是一个作业类,不过不需要继承Job接口了接下是定义JobDetail,MethodInvokingJobDetailFactoryBean起到工厂类的作用,生成JobDetail对象并制定需要调用的类及类的方法
<bean id="Order1JobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="secondHandReturnOrder1JobServiceImpl" /><!-- 调用的类 --> <property name="targetMethod" value="Run" /><!-- 调用类中的方法 --> <property name="concurrent" value="false" /></bean>
定义CronRigger,CronTriggerBean其实是继承了CronTrigger
<bean id="Order1DoTime" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="secondHandReturnOrder1JobTask" /> <!-- cron表达式 --> <property name="cronExpression" value="0 30 2 * * ?" /></bean>
从SchedulerFactory获取Scheduler对象并调度定义的Trigger
<bean id="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="secondHandReturnOrder1DoTime"/> </list> </property> </bean>
做个api来监控和调度Quartz吧
我称之为Quartz API,它是一个servlet,起到API的作用,接受外部请求,展示并控制当前quartz调度的任务
首先获取Spring注入生成的Schedule
applicationContext=WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); scheduler=(Scheduler) applicationContext.getBean("startQuartz");
获取当前调度的Quartz信息
String [] triggerGNs = scheduler.getTriggerGroupNames();for (int i = 0; i < triggerGNs.length; i++) {String [] triggerNames = scheduler.getTriggerNames(triggerGNs[i]);for (int j = 0; j < triggerNames.length; j++) {Trigger trigger = scheduler.getTrigger(triggerNames[i], triggerGNs[i]);HashMap<String, String> map = new HashMap<String, String>();if(trigger instanceof CronTrigger){map.put("cronExpression", ((CronTrigger)trigger).getCronExpression());}map.put("jobname", trigger.getJobName());map.put("jobgroup", trigger.getJobGroup());map.put("last_time", df.format(EConvert.toDate(trigger.getPreviousFireTime())));map.put("next_time", df.format(EConvert.toDate(trigger.getNextFireTime())));int status = scheduler.getTriggerState(trigger.getName(), trigger.getGroup());map.put("status",getTriggerStatusName(status));list.add(map);}}
暂停/恢复Job
pause
scheduler.pauseJob(jobname, jobgroup);
resume
scheduler.resumeJob(jobname, jobgroup);
执行一次作业
scheduler.triggerJob(jobname, jobgroup);
- Quartz调度实践
- Quartz任务调度实践
- 开源调度框架Quartz最佳实践
- Quartz调度
- Quartz调度
- quartz调度
- quartz实践
- 实践---Quartz
- 【Quartz】Quartz任务调度入门
- Quartz任务调度
- J2EE 调度程序(Quartz)
- Quartz调度时好时坏解决方案
- 调度框架Quartz
- Quartz进行作业调度
- 使用Quartz调度器
- quartz 添加任务调度
- 使用Quartz调度器
- Quartz作业调度
- SICP 习题 (1.16)解题总结
- gcc 编译时碰到的一些错误提示整理
- 老鼠生子问题
- 集合操作类Collections和Arrays,JDK1.5新特性
- 2014年京东校招笔试中的两道java题目
- Quartz调度实践
- 二叉树的最低父节点
- SICP 习题 ( 1.17) 解题总结
- SICP 习题 (1.18) 解题总结
- android笔记--Android基本知识点
- [每日一题] 11gOCP 1z0-052 :2013-09-10 ABOUT ALERTS...............................................A50
- 用LauncherActivity开发启动Activity列表
- SICP 习题 (1.19) 解题总结
- poj1637Sightseeing tour(混合图欧拉回路)