一个 cron 表达式有 6 个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
* :代表所有可取的值,比如说,如果分钟为 * ,那么就表示每一分钟;
? :只有月份中的天数和星期中的天数可以使用?来表示,因为“月份中的天数”和“星
期中的天数”不能同时设值,所以我们可以通过?来表明不想设置的那个元素 ;
- :用来指定一个范围类的值,比如说,小时为 ”10-12” ,它就表示 10 点、 11 点、 12 点
, :逗号用来分隔一个元素的多个值,比如说“星期中的天数”为 "MON,WED,FRI" ,
它就表示周一、周三和周五。
/ :斜杠用来表示间隔,比如说,秒数为 5/10 ,那么它就表示第 5 秒、第 15 秒、第
25 秒、第 35 秒、第 45 秒和第 55 秒。斜杠前的数字表示起始位置,后面的数字表
示每次增长的数量。
L :仅用在“月份中的天数”和“星期中的天数”元素中。如果是前者,它代表某月的
最后一天;如果是后者,它就表示是周六。有一点特别的,当表示“星期中的天数”
时, L 可以和数字一起用,比如 ”6L” ,它就表示这个月的最后一个星期五。
W :只能用来表示“月份中的天数”,和数字一起使用。比如说 15W ,它就表示离这
个月 15 号最近的工作日。使用 W 时,“月份中的天数”必须为一个指定的日期,
而不能是一个范围的日期。
# :只能用来表示“星期中的天数”。例如 5#4 ,它表示某个月中第四个星期四, 2#1
表示某个月中第一个星期一。 # 前面的数字代表星期,后面的数字表示是第几个。
----------------------------------------------------------------------------------------------
JobDetailBean:
用户可以直接使用Quartz的JobDetail在Spring中配置一个JobDetail Bean,但是JobDetail使用带参的构造函数,对于习惯通过属性配制的Spring用户来说存在使用上的不便。为此Spring通过扩展JobDetail提供了一个更具Bean风格的JobDetailBean。
JobDetailBean扩展于Quartz的JobDetail。使用该Bean声明JobDetail时,Bean的名字即是任务的名字,如果没有指定所属组,就使用默认组。除了JobDetail中的属性外,还定义了以下属性:
JobClass:类型为Class,实现Job接口的任务。
BeanName:默认为Bean的ID名,通过该属性显式指定Bean名称,它对应任务的名称。
JobDateAsMap:类型为Map,为任务所对应的JobDataMap提供值。之所以需要提供这个属性,是因为用户无法在Spring配置文件为JobDataAsMap类型的属性提供信息,所以Spring通过jobDataAsMap设置JobDataMap的值。
ApplicationContextJobDataKey:用户可以将Spring ApplicationContext的引用保存到JobDataMap中,以便在Job的代码中访问ApplicationContext。为了达到这个目的,用户需要指定一个键,用以在jobDataAsMap中保存 ApplicationContext,如果不设置此键,JobDetailBean就不将ApplicationContext放入到JobDataMap中。
JobListenerNames;类型为String[],指定注册在Scheduler中的JobListeners名称,以便让这些监听器对本任务的事件进行监听。
- <bean id="autoSendJob"
- class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass">
- <value>com.techson.himsnanhwa.admin.scheduler.AutoSendScheduler</value>
- </property>
- <property name="applicationContextJobDataKey" value="applicationContext"/>
- <property name="jobDataAsMap">
- <map>
- <entry key="days">
- <value>1</value>
- </entry>
- <entry key="isAutoSend">
- <value>false</value>
- </entry>
- <entry key="isDebug">
- <value>false</value>
- </entry>
- </map>
- </property>
- </bean>
days、isAutoSend、isDebug是类中AutoSendScheduler中自己定义的属性!
- public class AutoSendScheduler extends QuartzJobBean {
- private int days=1;
- private Boolean isAutoSend;
- private Boolean isDebug;
- protected void executeInternal(JobExecutionContext arg0) {
- Map dataMap = arg0.getJobDetail().getJobDataMap();
- ApplicationContext appCtx = (ApplicationContext)dataMap.get("applicationContext");
- 。。。
- }
- }