Your SlideShare is downloading. ×
实时任务调度
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

实时任务调度

1,919
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,919
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 定时任务应用实例
  • 2. 两种任务调度方式1.在Spring中,使用JDK的Timer类库。不可以指定具体年、月、 日、时和分的时间。你只能将时间通过换算成微秒后传给它。 目前已不推荐使用。 <bean id="scheduledTask" class= "org.springframework.scheduling.timer.ScheduledTimerTask"> <!--程序启动后开始执行任务的延迟时间 --> <property name="delay" value="0" /> <!--每隔一天【一天=24×60×60×1000微秒】执行一次-- > <property name="period" value="86400000" /> <!--业务统计报表bean --> <property name="timerTask" ref="businessReport" /> </bean>
  • 3. 2.Quartz Quartz类库不但有着上述JDK的Timer类库类 似的配置,更重要的,它还有着类似于unix的 cron服务的配置。
  • 4. QUARTZ简介  quartz [英] [kwɔ:ts] [美] [kwɔrts] (酷袜子) 中文含 义石英  Quartz由James House创 建并最初于2001年春天被 加入sourceforge工程.  Quartz 是一个功能齐全的、 开源的、纯 Java 实现的 作业调度工具,相当于数 据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可 以把排程控制的更精细.  http://www.quartz- scheduler.org/
  • 5. 作业--JOB 作业是一个执行任务的简单java类。任务可 以是任何java代码。只需你实现 org.quartz.Job接口并且在出现严 重错误情 况下抛出JobExecutionException异常即可。 Job接口包含唯一的一个方法execute(),作 业从这里开始执行。一旦实现 了Job接口和 execute()方法,当Quartz确定该是作业运 行的时候,它将调用你的作业。Execute() 方法内就完全是你要做的事情。
  • 6. 一个简单的作业实现public class ScanDirectoryJob implements Job { static Log logger = LogFactory.getLog(ScanDirectoryJob.class); //JobExecutionContext 是连接scheduler与job的桥梁 public void execute(JobExecutionContext context) throws JobExecutionException { // Every job has its own job detail JobDetail jobDetail = context.getJobDetail(); // The name is defined in the job definition String jobName = jobDetail.getName(); // Log the time the job started logger.info(jobName + " fired at " + new Date()); //JobDataMap 可给任务传递一些必要的运行参数 JobDataMap dataMap = jobDetail.getJobDataMap(); String dirName = dataMap.getString("SCAN_DIR"); if (dirName == null) { throw new JobExecutionException( "Directory not configured" ); } //TODO: 执行任务具体内容 }}
  • 7. 触发器 Quartz中的触发器用来告诉调度程序作业 什么时候触发。框架提供了一把触发器类 型,但两个 最常用的是SimpleTrigger和 CronTrigger。SimpleTrigger为需要简单打 火调度而设计。典型地,如果你需要在给 定的时间 和重复次数或者两次打火之间等 待的秒数打火一个作业,那么 SimpleTrigger适合你。另一方面,如果你 有许多复杂的作业调度,那么或许需要 CronTrigger Rooster中统一使用CronTrigger
  • 8. 触发器示例 UNIX 给出五个域(分、时、日、月和周)Quartz给 了七个域(秒、分、时、日、月、周、年)通常我们使用前六个字段就可以完成 任务执行的时间设置.年不是必需存在的字段 scheduler = StdSchedulerFactory.getDefaultScheduler(); // Create the JobDetail JobDetail jobDetail =new JobDetail("PrintInfoJob",Scheduler.DEFAULT_GROUP,PrintInfoJob.class); // Create a CronTrigger // CronTrigger that fires @7:30am Mon - Fri CronTrigger trigger = new CronTrigger("CronTrigger", null,"0 30 7 ? * MON-FRI"); scheduler.scheduleJob(jobDetail, trigger);
  • 9. QUARTZ核心—调度器 Quartz调度器(Scheduler) Quartz框架的核心是调度器。调度器负责 管理Quartz应用运行时环境。调度器不是 靠自己做所有的工作,而是依赖框架内一 些非常重要的部件。 Quartz不仅仅是线程 和线程管理。为确保可伸缩性,Quartz采 用了基于多线程的架构。启动时,框架初 始化一套worker线程,这套线程被调度器 用来执行预定的作业。这就是Quartz怎样 能并发运行多个作业的原理。
  • 10. 作业管理和存储 Quartz提供两种基本作业存储类型。第一种类型叫 做RAMJobStore,它利用通常的内存来持久化调度 程序信息。这种作业存储类型最容易配置、 构造和 运行。对许多应用来说,这种作业存储已经足够了。 然而,因为调度程序信息是存储在被分配给JVM的 内存里面,所以,当应用程序停止运行时,所有调 度 信息将被丢失。如果你需要在重新启动之间持久 化调度信息,则将需要第二种类型的作业存储 (1)JobStoreTX:当你想要控制事务或工作在非应 用服务器环境中时使用 (2)JobStoreCMT:当你工作在应用服务器环境中 和想要容器控制事务时使用。
  • 11. SPRING中大致配置方式1.Xml方式,配置比较麻烦 首先,job定义,job实现相应接口 <bean id="testScheduleJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.oupeng.annotation.task.TestSchedule</value> </property> <property name="jobDataAsMap"> <map> <entry key="testService" value-ref="testService" /> </map> </property> </bean>
  • 12.  其次,Trigger定义 <bean id="testScheduleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="testScheduleJob" /> </property> <property name="startDelay"> <value>1000</value> </property> <property name="repeatInterval"> <value>3000</value> </property> </bean> <!-- 触发器 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <!-- 指向我们的任务 --> <property name="jobDetail" ref="reportTask" /> <!-- 每天下午16点50分到55分,每分钟运行一次 --> <property name="cronExpression" value="0 50-55 16 * * ?" /> </bean>
  • 13.  最后,scheduler定义 <bean id="scheduler" class="org.springframework.scheduling.quart z.SchedulerFactoryBean"> <property name="triggers"> <ref bean="testScheduleTrigger" /> </property> </bean>
  • 14.  2.annotation方式,简单 只需要在相应的任务方法上添加@Scheduled,spring配置文件中加入 <task:annotation-driven /> /** * cron语法描述 * 1.Seconds秒 (0-59) (, - * /) * 2.Minutes分钟 (0-59) (, - * /) * 3.Hours小时 (0-23) (, - * /) * 4.Day-of-Month月中的天 (1-31) (, - * ? / L W) * 5.Month月 (1-12或JAN-DEC) (, - * /) * 6.Day-of-Week周中的天 (1-7或SUN-SAT) (, - * ? / L #) * 7.Year(optional)年(可选) (空或1970-2099) (, - * /) */ //@Scheduled(cron="0 0 1 * * ?") @Scheduled(fixedDelay=1000 * 60 * 1) public void createGoodsIndex(){ testService.testService(); }
  • 15. 问题 1.不利于测试 2.任务时间修改后需要重启 考虑能够实时控制任务的机制
  • 16. 框架大概原理与结构 Spring+Quartz 替换调原来单纯 的spring任务调 度,在此基础上 原有任务业务逻 辑不变.
  • 17. 一个简单的QUARTZ调用 //创建调度器 Scheduler scheduler = schedulerFactoryBean.getScheduler(); //创建任务 JobDetail jobDetail = new JobDetail(jobName, jobGroup, jobClass); CronTrigger cronTrigger = new CronTrigger(jobName + "Trigger", jobName + "TriggerGroup"); //创建触发器 try { CronExpression cexp = new CronExpression(cronExpression); cronTrigger.setCronExpression(cexp); } catch (Exception e) { e.printStackTrace(); } //运行任务 scheduler.scheduleJob(jobDetail, cronTrigger);
  • 18. 减少配置,可视化任务操作 1.定义通用job public void execute(JobExecutionContext context) throws JobExecutionException { WebApplicationContext springWebContext = SpringContextUtil.getContext(); JobDataMap dataMap = context.getJobDetail().getJobDataMap(); String beanName = dataMap.getString("beanName"); String methodName = dataMap.getString("methodName"); logger.info("begin ~~~~~~~~~~ bean name={},method name={}", beanName, methodName); Object taskBean = springWebContext.getBean(beanName); Method method = null; try { method = taskBean.getClass().getMethod(methodName, null); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } try { ReflectionUtils.invokeMethod(method, taskBean, null); } catch (Exception e) { e.printStackTrace(); } logger.info("end..................bean name={},method name={} complete!", beanName, methodName);
  • 19.  在任务的增删改查的时候 Class jobClass = null; try { jobClass = Class.forName(通用job类); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } JobDetail job = newJob(jobClass).withIdentity(jobName, group).requestRecovery(true).build(); JobDataMap map = job.getJobDataMap(); map.put("beanName", beanName); map.put("methodName", methodName); scheduler.scheduleJob(job, trigger); scheduler.pauseJob 暂停任务 scheduler.resumeJob 继续任务 scheduler.deleteJob 删除任务
  • 20. 参考资料 Quartz Job Scheduling Framework中 文 版 http://wenku.baidu.com/view/7b8e11fff705cc 175527095a.html
  • 21. 谢谢
  • 22. 中国古代四大美女
  • 23. 林志玲
  • 24. 杨幂
  • 25. 赵雅芝
  • 26. 佟丽娅
  • 27. 反正肯定不是这种。。。
  • 28. 古代中国美女的标准 不同时代对美的诠释更是大相径庭 中国汉代以前,人们对女性只注重面部形象, 到了魏晋,才开始着重于装饰。魏文帝喜欢打 扮华丽并将头发挽成蝉翼形的妃子。唐朝是开 放社会,容许袒胸露臂,崇尚的女性体态美是 额宽、脸圆、体胖。 唐朝以后没有定论。宋朝以后,大致是以观音 菩萨的本貌作为女性美的高标准,各个时代所 雕塑绘画的观音菩萨,就是当时审美标准的具 体说明。
  • 29. 西施 西施,名夷光,春秋战国时期出生於浙江诸暨苎 萝村。天生丽质。时越国称臣於吴国,越王句践 卧薪尝胆,谋复国。在国难当头之际,西施忍辱 负重,以身许国,与郑旦一起由越王勾践献给吴 王夫差,成为吴王最宠爱的妃子。把吴王迷惑得 众叛亲离,无心国事,为勾践的东山再起起了掩 护的作用。表现了一个爱国女子的高尚思想情操。 后吴国终被句践所灭。传说吴被灭后,与范蠡泛 舟五湖,不知所终。一直受到后人的怀念。西施 与杨贵妃、王昭君、貂婵为中国古代四大美女, 其中西施居首,是美的化身和代名字.
  • 30.  “沉鱼”,讲的是西施的故事。 纱的女子,五官端正,粉面桃 花,相貌过人。她在河边浣纱 时,清彻的河水映照她俊俏的 身影,使他显得更加美丽,这 时,鱼儿看见她的倒影,忘记 了游水,渐渐地沉到河底。从 此,西施这个“沉鱼”的代称, 在附近流传开来。西施被选送 到吴国后,吴王一看西施长得 如此漂亮,对西施百依百顺, 终日沉溺于游乐,不理国事, 国力耗费殆尽。越王勾践乘虚 而入,出兵攻打吴国,达到了 复国报仇的目的,这里边有西 施的很大功劳。
  • 31. 貂蝉 貂蝉,山西并州(今忻州)人。是东汉末年司徒 王允的歌女,国色天香,有倾国倾城之貌。见 东汉王朝被奸臣董卓所操纵,於月下焚香祷告 上天,愿为主人担忧。王允眼看董卓将篡夺东 汉王朝,设下连环计。王允先把貂蝉暗地里许 给吕布,在明把貂蝉献给董卓。吕布英雄年少, 董卓老奸巨猾。为了拉拢吕布,董卓收吕布为 义子。二人都是好色之人。从此以后,貂蝉周 旋於此二人之间,送吕布於秋波,报董卓於妩 媚。把二人撩拨得神魂颠倒。
  • 32. 闭月  闭月说的是貂禅,貂婵 在后花园拜月时,忽然 轻风吹来,一块浮云将 那皎洁的明月遮住。这 时正好王允瞧见。王允 为宣扬他的女儿长得如 何漂亮,逢人就说,我 的女儿和月亮比美,月 亮比不过,赶紧躲在云 彩后面,因此,貂婵也 就被人们称为“闭月”了。
  • 33. 王昭君 汉宣帝时匈奴贵族争夺权力,势渐衰落,五个 单于分立,互相攻打不休。其中呼韩邪单于, 被他的哥哥郅支(郅音zhi)单于打败。呼韩 邪决心跟汉朝和好,亲自朝见汉宣帝。呼韩邪 是第一个到中原来朝见的单于,汉宣帝亲自到 长安郊外去迎接他,为他举行了盛大的宴会。 呼韩邪单于在长安住了一个多月。他要求汉宣 帝帮助他回去。汉宣帝答应了,派了两个将军 带领一万名骑兵护送他到了漠南。这时候,匈 奴正缺少粮食,汉朝还送去三万四千斛粮食。
  • 34. 落雁  汉宣帝死了后,他的儿 子刘奭(音shi)即位, 就是汉元帝。匈奴的郅 支单于侵犯西域各国, 杀了汉朝派去的使者。 汉朝派兵打到康居,杀 郅支单于。郅支单于一 死,呼韩邪单于的地位 稳定了。公元前33年, 呼韩邪单于再一次到长 安,要求和亲。
  • 35. 落雁  “落雁”,就是昭君出塞的那段 故事。汉元帝在位期间,南北 交兵,边界不得安静。汉元帝 为安抚北匈奴,选昭君与单于 结成姻缘,以保两国永远和好。 在一个秋高气爽的日子里,昭 君告别了故土,登程北去。一 路上,马嘶雁鸣,撕裂她的心 肝;悲切之感,使她心绪难平。 她在坐骑之上,拨动琴弦,奏 起悲壮的离别之曲。南飞的大 雁听到这悦耳的琴声,看到骑 在马上的这个美丽女子,忘记 摆动翅膀,跌落地下。从此, 昭君就得来“落雁”的代称。
  • 36. 杨贵妃 (719~756)唐代蒲州永乐人(陜西华阴县人)。通 晓音律,能歌善舞。最初为唐玄宗的第十八子寿 王的王妃,唐玄宗见杨玉环的姿色后,欲纳入宫 中,着为女道士,号太真。天宝四年(745)入 宫,得唐玄宗宠幸,封为贵妃,(时玄宗年六十 一,贵妃年二十七)父兄均因此而得以势倾天下。 贵妃每次乘马,都有大宦官高力士亲至执鞭,贵 妃的织绣工就有七百人,更有争献珍玩者。岭南 经略史张九章,广陵长史王翼,因所献精美,二 人均被升官。于是,百官竟相仿效。杨贵妃喜爱 岭南荔枝,就有人千方百计急运新鲜荔枝到长安。
  • 37. 羞花  “羞花”,说的是杨贵妃。唐朝 开元年间,唐明皇骄奢淫逸, 派出人马,四处搜寻美女。当 时寿邸县的宏农杨元琰,有一 美貌女儿叫杨王环,被选进宫 来。杨玉环进宫后,思念家乡。 一天,她到花园赏花散心,看 见盛开的牡丹、月季……想自 己被关在宫内,虚度青春,不 胜叹息,对着盛开的花说:“花 呀,花呀!你年年岁岁还有盛 开之时,我什么时候才有出头 之日?”声泪俱下,她刚一摸花。 花瓣立即收缩,绿叶卷起低下。
  • 38.  西施:大脚。素有“沉鱼”之誉的西施虽然美丽,但是脚却比 一般人大,于是她想方设法地掩盖这个缺点,因为她喜欢 跳舞,所以她经常穿长裙,又为自己特制了一双木屐,结 果因为鞋子高了一块,不但看不出来脚大,还因为走路时 左右摇摆,加之长裙飘飘,反而格外地突出了娉婷身材, 翩翩风姿 王昭君:削肩。让“落雁”为之惊叹的昭君容貌出 众,但是肩膀有点窄小,正好安排她出塞,于是她就经常 披着毛皮制的斗篷,由于皮毛的蓬松,不但使她的削肩得 到了隐藏,还因为雪白的围领和鲜红的斗篷衬托,反而更 映得她五官秀美,眉目如画 貂婵:耳小。传闻能够“闭月” 的貂婵顺利地实行了美人计,是因为她天生丽质,但是她 耳朵极小,特别是耳垂,几乎无肉,未免难看。于是她就 从耳环上弥补,经常戴那些镶有独粒大宝石的圆形耳环, 不但看不出耳朵的缺陷,反而是细耳碧环,愈显俏丽 杨贵 妃:狐臭。号称有“羞花”之美的杨玉环其实体味浓重,所以 她特别喜欢沐浴——“春寒赐浴华清池”,传下了千古美名。 不过她经常洗澡是因为狐臭的缘故,常洗自然会减轻很多 味道,而且她还喜欢鲜花,更经常佩戴香囊,因此不但不 会令人闻到刺鼻的气味,反而行动处香风飘拂,嗅之欲醉