1、全局定时更新编辑
在进行全局更新时,除了手动立即更新的方式,我们还可以设置定时更新。全局定时更新在某个固定的时间点,对所有业务包中的非实时数据表全部更新到本地。
与全局手动更新类似,我们进入数据准备>更新设置,在全局更新设置界面可以看到全局定时更新任务框,如下图:
点击+定时设置即可进入定时任务设置界面,如下图:
定时任务设置完成后点击确定按钮,在任务框中即存在刚设置的定时更新任务,如下图:
若想要添加多个全局定时更新任务,则再次点击+定时设置添加任务。
若想要删除或修改已添加的任务,在任务列表的任务后面单击对应的编辑或删除图标即可。
2、定时任务设置编辑
定时任务设置界面包含任务名称、开始时间、执行频率、结束时间的设置,如下图:
任务名称可自定义设置(且同类型更新任务不能重名)。
开始时间和结束时间是指更新任务开始和结束的时间,并不是指全局更新的时间。开始和结束的时间粒度可细化到时分秒。
执行频率包含四种:只执行一次、简单重复执行、明细频率设置、表达式设定,如下图所示:
只执行一次表示该定时更新任务只在设置的开始时间开始执行一次全局更新,执行结束时间无需设置。
选择简单重复执行则可进行简单的间隔时间设置,包含分钟、小时、天、周四种时间间隔粒度,如下图:
而简单重复执行频率的结束时间则包含了三种,包括:无限期、设定结束时间和额外重复执行次数:
无限期即表示无结束时间,定时更新任务会一直定时执行;设定结束时间则可以与开始时间一样设置到年月日时分秒;
额外重复执行次数则是指在设置的开始时间执行了定时任务之后会在间隔时间达到后再执行任务的次数,可手动设置次数。
选择明细频率设置可进行细化的间隔时间设置,如下图,包含了细化到时分的执行时间和执行日、执行月设置。
执行时间是指执行全局更新的时间;执行日可选每天、每周和每月,其中每周可在周一至周日之间单选或多选,每月可在1号到31号之间单选或多选;执行月可在一年中的1月到12月单选或多选。
执行频率选择明细频率设置后,任务结束时间只能选择两种:无限期或设定结束时间,其设置与上述类似。
选择表达式设定即指设定一些特定时间的更新频率,其中预置表达式包含五种,如下图:
也可以进行自定义的表达式设置,填入时间频率的Cron表达式,需填写正确的表达式才能进行定时更新,Cron表达式的详细使用方法可参考下面2.3章节。
结束时间同样只能选择无限期或者设定结束时间,可根据需要设置。
Cron表达式为一个字符串,由5或6个空格隔开,分为6或7个域,每一个域代表一个时间范围。Cron有如下两种语法格式:
1) Seconds Minutes Hours DayofMonth Month DayofWeek Year
2) Seconds Minutes Hours DayofMonth Month DayofWeek
从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份(可选)。
每一个域可出现的字符如下:
域 | 允许值 | 允许的特殊字符 |
---|---|---|
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0-59的整数 | , - * / 四个字符 |
小时(Hours) | 0-23的整数 | , - * / 四个字符 |
日期(DayofMonth) | 0-31的整数(但是需要考虑月的天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1-12的整数或英文JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1-7的整数或英文SUN-SAT(1=SUN, 2=MON,...) | , - * ? / L C # 八个字符 |
年份(Year) | 1970-2099 | , - * / 四个字符 |
每一个域除了使用数字还可以出现特殊字符,其中特殊字符的含义如下:
(1)* :表示匹配该域的任意值,假如在Minutes域使用*,即表示每分钟都会触发事件;
(2)? :只能用在DayofMonth(日期)和DayofWeek(星期)两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?,其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样;
(3)- :表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次;
(4)/ :表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次;
(5), :表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。
(6)L:该字符只在DayofMonth(日期)和DayofWeek(星期)域中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L在前面有一个数值X,它就具有其他含义了。例如,月份中的6L表示该月的倒数第六天;星期域中的FRIL表示这个月的最后一个星期五。
(7)W:该字符只能出现在DayofMonth(日期)域里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围;
(8)LW:在DayofMonth字段可以组合使用LW,它的意思是当月的最后一个工作日;
(9)C:该字符只在DayofMonth(日期)和DayofWeek(星期)域中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如:5C在日期字段中就相当于日历5日以后的第一天;1C在星期字段中相当于星期日后的第一天;
(10)#:该字符只能在DayofWeek(星期)域中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个);而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;
Cron表达式示例:
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每隔1小时执行一次:0 0 */1 * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
根据上面的表达式规则获取Cron表达式以后,可参考链接http://www.pppet.net/检查写的表达式是否正确,确保正确以后填入。