




免费预览已结束,剩余25页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring Quartz如何动态配置时间(1) 1. 目的:动态设置时间,触发相应的任务 2. 系统架构为 struts + spring + hibernate 3. 实现步骤: 在页面上设置时间; 将时间转换为Unix Cron Expression; 将转换后的时间规则表达式记录到数据库中(也可以写入xml文件中,这里是项目需要记录入数据库中); 从数据库中得到相应的时间规则表达式; 更新您的任务触发器的时间设置; RESCHEDULE THE JOB。; - ) 4. 具体实现细节: 1) 在页面上设置时间 根据具体的业务需求,设置时间规则,下面以某一项目为例,需要 按每月、每周、自定义分为三种规则。 1 2 执行这个任务 3 4 每月 5 每周 6 自定义 7 8 9 10 每月则需要选择该月的第几个星期的星期几 1 2 选择第几个星期 3 4 5 一 6 二 7 三 8 四 9 10 11 星期日 12 星期一 13 星期二 14 星期三 15 星期四 16 星期五 17 星期六 18 19 20 21 每周则需要选择星期几 1 2 选择星期 3 4 5 星期日 6 星期一 7 星期二 8 星期三 9 星期四 10 星期五 11 星期六 12 13 14 15 自定义则选择具体的日期,如 2007-1-10三种规则都需要设定时间点1 2 起始时间 3 4 5 上午 6 下午 7 8 9 1 10 2 11 3 12 4 13 5 14 6 15 7 16 8 17 9 18 10 19 11 20 12 21 22 23 13 24 14 25 15 26 16 27 17 28 18 29 19 30 20 31 21 32 22 33 23 34 0 35 点36 分37 秒(0-59之间的整数)38 39 40 OK. 这样我们的页面设置就完成了。: - )To Be Continued. posted on 2007-01-10 15:39 小立飞刀 阅读(1782) 评论(2) 编辑 收藏 所属分类: Spring FeedBack: #re: Spring Quartz如何动态配置时间(1)2007-01-10 18:36 | zxy继续发扬共享精神哦 hoho 回复更多评论#re: Spring Quartz如何动态配置时间(1)2007-01-11 10:13 | 小雪飞刀谢谢,我会继续努力,呵呵回复更多评论Spring Quartz如何动态配置时间(2)书接上回,上回说到,武松武二郎斗杀西门庆,为大哥报了仇 !-_- 啊,说串了,嘿嘿 不好意思(删掉上面一行)上回说到,我们的设置页面已经做好了,接下来就是将时间转换为Unix Cron Expression。2) 将时间转换为Unix Cron Expression需要ActionForm将页面表单数据映射到Action中,然后在Action中转换为cron expression: 1 SchedulerForm schedulerForm = (SchedulerForm) form; 2 String jobName = schedulerForm.getJobName(); 3 String cronExpression = ; 4 String commonNeeds = schedulerForm.getSecond(), schedulerForm.getMinute(), schedulerForm.getHour() ; 5 String monthlyNeeds = schedulerForm.getWeek(), schedulerForm.getDayOfMonth() ; 6 String weeklyNeeds = schedulerForm.getDayOfWeek(); 7 String userDefinedNeeds = schedulerForm.getDate(); 8 String everyWhat = schedulerForm.getEveryWhat(); 9 / 得到时间规则10 cronExpression = CronExpConversion.getCronExpression(everyWhat, commonNeeds,11 monthlyNeeds, weeklyNeeds, userDefinedNeeds);12我定义了一个 规则类来处理转换规则(写得不是很好 能用就行 嘿嘿) 1 2 /* */ /* 3 * 页面设置转为UNIX cron expressions 转换类 4 * CronExpConversion 5 */ 6 public class CronExpConversion 7 8 /* */ /* 9 * 页面设置转为UNIX cron expressions 转换算法10 * param everyWhat11 * param commonNeeds 包括 second minute hour12 * param monthlyNeeds 包括 第几个星期 星期几13 * param weeklyNeeds 包括 星期几14 * param userDefinedNeeds 包括具体时间点15 * return cron expression16 */17 public static String convertDateToCronExp(String everyWhat,18 String commonNeeds, String monthlyNeeds, String weeklyNeeds,19 String userDefinedNeeds) 20 String cronEx = ;21 String commons = commonNeeds 0 + + commonNeeds 1 + 22 + commonNeeds 2 + ;23 String dayOfWeek = ;24 if ( monthly .equals(everyWhat) 25 / eg.: 6#3 (day 6 = Friday and #3 = the 3rd one in the26 / month)27 dayOfWeek = monthlyNeeds 1 28 + CronExRelated.specialCharacters29 .get(CronExRelated._THENTH) + monthlyNeeds 0 ;30 cronEx = (commons31 + CronExRelated.specialCharacters.get(CronExRelated._ANY)32 + 33 + CronExRelated.specialCharacters.get(CronExRelated._EVERY)34 + + dayOfWeek + ).trim();35 else if ( weekly .equals(everyWhat) 36 dayOfWeek = weeklyNeeds; / 137 cronEx = (commons38 + CronExRelated.specialCharacters.get(CronExRelated._ANY)39 + 40 + CronExRelated.specialCharacters.get(CronExRelated._EVERY)41 + + dayOfWeek + ).trim();42 else if ( userDefined .equals(everyWhat) 43 String dayOfMonth = userDefinedNeeds.split( - ) 2 ;44 if (dayOfMonth.startsWith( 0 ) 45 dayOfMonth = dayOfMonth.replaceFirst( 0 , );46 47 String month = userDefinedNeeds.split( - ) 1 ;48 if (month.startsWith( 0 ) 49 month = month.replaceFirst( 0 , );50 51 String year = userDefinedNeeds.split( - ) 0 ;52 / FIXME 暂时不加年份 Quartz报错53 /*/ /* cronEx = (commons + dayOfMonth + + month + 54 + CronExRelated.specialCharacters.get(CronExRelated._ANY)55 + + year).trim(); */56 cronEx = (commons + dayOfMonth + + month + 57 + CronExRelated.specialCharacters.get(CronExRelated._ANY)58 + ).trim();59 60 return cronEx;61 62 63这样就将页面的时间设置转为了Cron Expression。 To Be Continued.posted on 2007-01-10 16:15 小立飞刀 阅读(1510) 评论(3) 编辑 收藏 所属分类: SpringFeedBack:# re: Spring Quartz如何动态配置时间(2)2007-01-10 18:34 | zxy好好好 不错不错 回复 更多评论 # re: Spring Quartz如何动态配置时间(2)未登录2007-10-15 09:09 | CC能否提供下CronExRelated类的代码?貌似不是spring或者quartz包里的 回复 更多评论 # re: Spring Quartz如何动态配置时间(2)2007-10-15 09:40 | 小立飞刀CC这个类封装了一些Quartz时间规则的常量,便于自己使用,定义比较灵活,可以根据您的具体情况扩展。/* Quartz时间规则常量类* CronExRelated* author allen*/public class CronExRelated public static final String _EVERY = every;public static final String _ANY = any;public static final String _RANGES = ranges;public static final String _INCREMENTS = increments;public static final String _ADDITIONAL = additional;public static final String _LAST = last;public static final String _WEEKDAY = weekday;public static final String _THENTH = theNth;public static final String _CALENDAR = calendar;public static final String _TYPE = type;/* 0 0 6 ? * 1#1 ? monthly* 0 0 6 ? * 1 ? weekly* 0 0 6 30 7 ? 2006 useDefined*/static String headTitle = TYPE,SECONDS,MINUTES,HOURS,DAYOFMONTH,MONTH,DAYOFWEEK,YEAR;/* cron expression special characters* Map* specialCharacters*/public static Map specialCharacters;static specialCharacters = new HashMap(10);specialCharacters.put(_EVERY, *);specialCharacters.put(_ANY, ?);specialCharacters.put(_RANGES, -);specialCharacters.put(_INCREMENTS, /);specialCharacters.put(_ADDITIONAL, ,);specialCharacters.put(_LAST, L);specialCharacters.put(_WEEKDAY, W);specialCharacters.put(_THENTH, #);specialCharacters.put(_CALENDAR, C);specialCharacters.put(_TYPE, headTitle);public static void set(String ex, int index) (String)specialCharacters.get(_TYPE)index = ex; 回复 更多评论 Spring Quartz如何动态配置时间(3)书接上回,上回说到,我们已经将页面的时间设置转为了Cron Expression,下面我记录了时间规则。3) 记录时间规则 我将时间规则存入数据库中,目的是为了生成历史日志,也可以存入XML文件中。当然您也可以省略此步,直接将转换后的规则放入相应的Quartz trigger中。4) 更新任务触发器的时间设置到了关键的一步了,也是最简单的一步,一个方法就可以实现了。首先,我们需要通过trigger的名称得到一个CronTriggerBean;其次,通过trigger的setCronExpression(String cronExp)方法将新的表达式注入;最后,RESCHEDULE THE JOB,OK! 1 /* */ /* 2 * 自定义定时器调度时间 3 * param triggerName 触发器名称 4 * throws Exception 5 */ 6 public void updateNotificationInterval(String triggerName, String triggerId) 7 throws SchedulerException, ParseException 8 / 得到trigger 9 CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(10 triggerName, Scheduler.DEFAULT_GROUP);11 / 得到cron expression 12 String cronExpression = schedulerDAO.getCronExpression(triggerId);13 / 设置trigger的时间规则14 trigger.setCronExpression(cronExpression);15 / 重置job16 scheduler.rescheduleJob(triggerName, Scheduler.DEFAULT_GROUP, trigger);17 18至此,目的达到了,快乐的看着您的任务在您自定义的时间下快乐的执行,您是否也想像Happy Feet中那只快乐的企鹅一样,Show段踢踏呢 ; - DPS:忘了说我的Quartz任务是怎么配置的了,罪过,罪过。 0 39 16 20 * ? THE ENDposted on 2007-01-10 16:55 小立飞刀 阅读(2165) 评论(17) 编辑 收藏 所属分类: SpringFeedBack:# re: Spring Quartz如何动态配置时间(3)2007-01-10 17:14 | zipgood! 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-01-10 17:55 | ajax java group感觉有点像 crontab . 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-01-11 10:19 | 小雪飞刀其实Quartz的Cron Expression就是来自Unix中,所以感觉很像crontab命令 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-01-11 18:25 | yy77上面这个updateNotificationInterval究竟写在哪个类里面呢?这个类要在xml里面怎么配置才能够得到scheduler的对象呢?看最后声明的那部分没有这个类的部分啊。难道是直接通过context来获得么? 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-01-15 10:59 | 小雪飞刀to yy77updateNotificationInterval() 这个方法可以写在你的业务逻辑类中,scheduler对象在这个类中注入就可以用了。如:public class SchedulerService private Scheduler scheduler;/* param scheduler The scheduler to set.*/public void setScheduler(Scheduler scheduler) this.scheduler = scheduler;public void updateNotificationInterval(.) /.scheduler.rescheduleJob(.);/.在Spring中的配置如下:而schedulerFactory这个bean我在文章中写到了不知道这样能不能回答你的问题呢,yy77 ?;-) 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)未登录2007-02-12 16:48 | Spring我想请问一下:我都配置好了,程序到了制定的时间会进入方法A,我想在进入方法A后,就取得 0 39 16 20 * ? 这个值,应该怎么实现呢?谢谢 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-02-12 17:00 | 小雪飞刀Spring我理解您的意思是:您的Method A中需要用到这个时间,但是不知道从哪里取到。我的解决方法是将所有的时间规则放入数据库中,然后从数据库中读取最近插入的一个值就是所需时间了。不知道这样能不能回答你的问题。 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)未登录2007-02-13 09:36 | Spring感谢您的回答,可能我没表达清楚我的意思!我现在的时间是在数据库中,就用您的方法假设,我要定时触发这个方法 ,但是这个方法会在不同的时间点多次触发,比如每月最后1天,每个星期第一天都是触发这个方法!我这里可以配置多个时间么? 0 39 16 20 * ? 然后把这个时间值放进数据库查询!谢谢 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)未登录2007-02-13 15:16 | 过客如果找不到调用的方法一般是什么错误?类的名字,方法名在多次查证都是正确的 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-02-13 15:32 | 小雪飞刀过客能否把你的配置文件贴出来看看? 回复 更多评论 # re: Spring Quartz如何动态配置时间(3)2007-02-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度上海市执法类公务员招考笔试备考试题及答案解析
- 2025昆明市第十二中学教育集团聘用制教师招聘笔试备考试题及答案解析
- 节能知识培训讲座通知课件
- 2025年工业互联网平台网络流量整形技术在工业互联网平台商业模式中的应用报告
- 合肥市土地财政转型:现状、挑战与路径探索
- 公安机关食堂食品安全与营养健康承包服务协议
- 媒体介入面试题库及答案
- 基于2025年的生物医药技术专利分析及竞争格局报告
- 教师招聘之《小学教师招聘》能力检测试卷(原创题)附答案详解
- 教师招聘之《小学教师招聘》测试卷含答案详解(突破训练)
- 土石方水利工程资质挂靠协议
- 文化体育中心(文化馆)建设项目可行性研究报告
- GB/T 10810.1-2025眼镜镜片第1部分:单焦和多焦
- GB/T 45265-2025下肢假肢增材制造通用技术要求
- 设备维护与保养说明手册
- 教学课件-《伺服系统(第2版)》钱平
- 做最勇敢的自己
- 《诚信是金》班会课件
- 药房用药小知识培训课件
- 乳腺癌图文课件版
- 《支气管动脉栓塞术》课件
评论
0/150
提交评论