一般系统都会有定时任务存在,比如订单系统,会根据定时任务来实时同步订单状态,同步交易状态等等。定时任务可以使用Quartz 定时任务,也可以自己写一个任务调度系统,只要能实现功能就可以。
下面我简单介绍一下Quartz 定时任务配置,需要配置三个bean,分别为:quartz,trigger,scheduler:
quartz:配置目标bean和方法
trigger:触发器,配置quartz和cron表达式,指定触发时机
scheduler:将触发器配置到任务调度中
<!-- ****work start*********** --> <bean id="getFinanceToSubmitQuartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!--配置quartz--> <property name="targetObject" ref="hotelFinanceService" /><!--目标类,配置bean--> <property name="targetMethod" value="getFinanceToSubmit" /><!--目标方法--> <property name="concurrent" value="false" /> </bean> <bean id="getFinanceToSubmitTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><!--配置触发器--> <property name="jobDetail" ref="getFinanceToSubmitQuartz" /><!--连接quartz对象--> <!--cron表达式--> <property name="cronExpression" value="0 0 0/1 * * ?" /> </bean> <bean id="getFinanceToSubmitScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><!--配置-Scheduler-> <property name="triggers"> <list> <ref bean="getFinanceToSubmitTrigger" /><!--连接trigger--> </list> </property> <property name="autoStartup"> <value>false</value> </property> <property name="quartzProperties"> <props> <prop key="org.quartz.threadPool.threadCount">1</prop> </props> </property> </bean>
Cron表达式格式:
Seconds | Minutes | Hours | DayofMonth | Month | DayofWeek | Year
年份可为空
Cron表达式特殊字符
特殊字符 | 含义 |
---|---|
* | 所有值;每秒、每分钟、每小时执行等等 |
, | 指定值;指定哪些确定的时间点执行 |
- | 范围值;符号两边各有一个值,表示在这两个值之间的时间段执行 |
/ | 起始值,递增值;符号左边是起始值,右边是递增值,表示指定其实时间点和其后每递增后的时间点执行 |
? | 忽略值;使用它即不考虑这个字段 |
L | 最后值;每月的最后一天,每周的最后一天 |
W | 工作日;指定天的最近的工作日 |
# | 只能用在DayofWeek字段,符号左边表示周几,右边表示第几周,表示第几周的周几 |
Cron表达式字段允许值
字段 | 范围 |
---|---|
Seconds | 0-59 |
Minutes | 0-59 |
Hours | 0-23 |
DayofMonth | 1-31 |
Month | 1-12/JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC |
DayofWeek | 1-7/SUN, MON, TUE, WED, THU, FRI, SAT(1代表周日,其他顺延) |
Year | 1970-2099/不写 |
Cron表达式字段允许特殊字符
字段 | 特殊字符 |
---|---|
Seconds | * , - / |
Minutes | * , - / |
Hours | * , - / |
DayofMonth | * , - / L W ? |
Month | * , - / |
DayofWeek | * , - / L # ? |
Year | * , - / |
Cron表达式举例
*/10 * * * * ? 每隔10秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-10 * * ? 每天5-10点整点触发
0 0/30 * * * ? 每半小时触发一次
0 0-5 14 * * ? 在每天下午2:01,2:02,2:03,2:04,2:05触发
0 0/5 15 * * ? 在每天下午3点到下午3:55期间的每5分钟触发
0 0/5 14,16 * * ? 在每天下午2点到2:55期间和下午4点到4:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
0 10,33 14 ? 3 WED 每年三月的星期三的下午2:10和2:33触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 0 22 L * ? 每月最后一天22点执行一次
0 15 10 L * ? 每月最后一日的上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
0 15 10 * * ? 2020 2020年的每天上午10:15触发
0 15 10 ? * 6L 2020-2025 2020年至2025年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
“30 10 1 20 * ?” 每月20号1点10分30秒触发任务
“30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务
“30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务
“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务
“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务
“15-45 * * * * ?” 15到45秒内,每秒都触发任务
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务