Quartz2.1.7学习笔记-1-2015年3月10日星期二Quartz2.1.7学习笔记-2-1.Quartz简介Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。2.下载说明3.如何删除一个job1.1.获取运行job的jobKey或者自己声明一个JobKeyjob2_key=job2.getKey();或者:JobKeyjob2_key=newJobKey(job2,group2);1.2.删除代码//删除job2JobKeyjob2_key=newJobKey(job2,group2);scheduler.deleteJob(job2_key);1.触发器1.2.简单触发器Quartz2.1.7学习笔记-3-1.3.Cron触发器1.1.1简介CronTrigger支持比SimpleTrigger更具体的调度,而且也不是很复杂。基于cron表达式,CronTrigger支持类似日历的重复间隔,而不是单一的时间间隔——这相对SimpleTrigger而言是一大改进。Cron表达式包括以下7个字段:字段名允许的值特殊的值秒0-59,-*/分0-59,-*/时0-23,-*/日1-31,-*/?LW月1-12或JAN-DEC,-*/周1-7或SUN-SAT,-*/?L#年(可选)空或1970-2199,-*/说明:The'*'characterisusedtospecifyallvalues.Forexample,*intheminutefieldmeanseveryminute.翻译:星号“*”代表所有的值。例如,用在分钟字段中,代表所有“每一分”。The'?'characterisallowedfortheday-of-monthandday-of-weekfields.Itisusedtospecify'nospecificvalue'.Thisisusefulwhenyouneedtospecifysomethinginoneofthetwofields,butnottheother.Quartz2.1.7学习笔记-4-翻译:问号’?’只能用在日和周的字段中,用来指定“没有特定的值”。当你要指定两个字段中的一个字段为特殊日期,而另外一个不是,特别有用。注:日和周的字段必须有一个为’?’,不然会出现异常。CronExpression'0/20*****'isinvalid,.Causedby:java.text.ParseException:Supportforspecifyingbothaday-of-weekANDaday-of-monthparameterisnotimplemented.The'-'characterisusedtospecifyranges.Forexample10-12inthehourfieldmeansthehours10,11and12.翻译:横’-’表示范围。例如,在小时字段中”10-12”表示”10,11和12”3个时间。The','characterisusedtospecifyadditionalvalues.ForexampleMON,WED,FRIintheday-of-weekfieldmeansthedaysMonday,Wednesday,andFriday.翻译:字符’,’用来列举值。例如,在周字段中”MON,WED,FRI”表示”星期一,星期三,星期五”三天。The'/'characterisusedtospecifyincrements.Forexample0/15inthesecondsfieldmeanstheseconds0,15,30,and45.Quartz2.1.7学习笔记-5-And5/15inthesecondsfieldmeanstheseconds5,20,35,and50.Specifying'*'beforethe'/'isequivalenttospecifying0isthevaluetostartwith.Essentially,foreachfieldintheexpression,thereisasetofnumbersthatcanbeturnedonoroff.Forsecondsandminutes,thenumbersrangefrom0to59.Forhours0to23,fordaysofthemonth0to31,andformonths1to12.The/charactersimplyhelpsyouturnoneverynthvalueinthegivenset.Thus7/6inthemonthfieldonlyturnsonmonth7,itdoesNOTmeanevery6thmonth,pleasenotethatsubtlety.翻译:斜杠’/’用来表示递增值。例如,在秒字段中”0/15”表示”0秒,15秒,30秒,45秒”。又,在秒字段中”5/15”表示”5秒,20秒,35秒,50秒”。在”/”前使用”*”和使用”0”的效果一样。需要注意的是,在每一个字段中,值的范围可能超出。对于秒和分钟,值的范围是0到59,小时范围是0到23,天是0到31(估计这个地方英文有错),月是1到12。”/”能很简单第指定”第几”值。例如在月中指定”7/6”表示7月,而不是每6个月,请注意这一点。注:关于最后一点再记一点,例如40/30****?运行的结果:SimpleJobsays:group1.job1executingatTueMar1010:59:40CST2015Quartz2.1.7学习笔记-6-SimpleJobsays:group1.job1executingatTueMar1011:00:40CST2015SimpleJobsays:group1.job1executingatTueMar1011:01:40CST2015对于这一点写法最好写成“n/范围最大值”,例如”40/59”,当然也可以直接写个“40”,这样最简单。The'L'characterisallowedfortheday-of-monthandday-of-weekfields.Thischaracterisshort-handforlast,butithasdifferentmeaningineachofthetwofields.Forexample,thevalueLintheday-of-monthfieldmeansthelastdayofthemonth-day31forJanuary,day28forFebruaryonnon-leapyears.Ifusedintheday-of-weekfieldbyitself,itsimplymeans7orSAT.Butifusedintheday-of-weekfieldafteranothervalue,itmeansthelastxxxdayofthemonth-forexample6Lmeansthelastfridayofthemonth.Youcanalsospecifyanoffsetfromthelastdayofthemonth,suchasL-3whichwouldmeanthethird-to-lastdayofthecalendarmonth.Whenusingthe'L'option,itisimportantnottospecifylists,orrangesofvalues,asyou'llgetconfusing/unexpectedresults.翻译:字符”L”只能用在日和周字段中。该字符是”last”的简写,但是在这两个字段中表示的意思是不一样的。Quartz2.1.7学习笔记-7-例如,在日字段中表示月的最后一天---1月是31日,2月是28日(不是闰年)。如果在周字段中单独用“L”的话,仅仅表示“7”或者“星期六”。如果在周字段中和别的值一起用,表示“一个月中最后一个星期几”----例如“6L”表示“一个月中最后一个星期五”。在日字段中叶可以用来设定月最后一天的前几天的偏移量,例如”L-3”表示一个月中倒数第三天。L这个选项,不依赖一个特定的值,但是会得到一个令人捉摸不定的值。The'W'characterisallowedfortheday-of-monthfield.Thischaracterisusedtospecifytheweekday(Monday-Friday)nearestthegivenday.Asanexample,ifyouweretospecify15Wasthevaluefortheday-of-monthfield,themeaningis:thenearestweekdaytothe15thofthemonth.Soifthe15thisaSaturday,thetriggerwillfireonFridaythe14th.Ifthe15thisaSunday,thetriggerwillfireonMondaythe16th.Ifthe15thisaTuesday,thenitwillfireonTuesdaythe15th.Howeverifyouspecify1Wasthevalueforday-of-month,andthe1stisaSaturday,thetriggerwillfireonMondaythe3rd,asitwillnot'jump'overtheboundaryofamonth'sdays.The'W'charactercanonlybeQuartz2.1.7学习笔记-8-specifiedwhentheday-of-monthisasingleday,notarangeorlistofdays.The'L'and'W'characterscanalsobecombinedfortheday-of-monthexpressiontoyield'LW',whichtranslatestolastweekdayofthemonth.翻译:字符’W’只能用在日字段中。用这个字符可以用来确定与给定日期最接近的工作日(周一到周五)。例如,在日字段中‘15W’是指:和15号最近的哪个工作日。如果15号是星期六,那么触发器将会在14号星期五执行,如果15号市星期日,那么触发器将会在16号星期一执行。如果15号市星期二,那边触发器就在该天15号星期二执行。如果指定’1W’,即使1号是星期六,触发器会在3号星期一执行,不会跨月执行。‘W’只会表示一个月中的某一天,不能表示多天或连续几天。‘L’和’W’可以组合在一起成’LW’,表示一个月中最后一个工作日。The'#'characterisallowedfortheday-of-weekfield.ThischaracterisusedtospecifythenthXXXdayofthemonth.Forexample,thevalueof6#3intheday-of-weekfieldmeanstheQuartz2.1.7学习笔记-9-thirdFridayofthemonth(day6=Fridayand#3=the3rdoneinthemonth).Otherexamples:2#1=thefirstMondayofthemonthand4#5=thefifthWednesdayofthemonth.Notethatifyouspecify#5andthereisnot5ofthegivenday-of-weekinthemonth,thennofiringwilloccurtha