Cron-定时任务

        一般系统都会有定时任务存在,比如订单系统,会根据定时任务来实时同步订单状态,同步交易状态等等。定时任务可以使用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秒触发任务

猜你喜欢

转载自blog.csdn.net/fz13768884254/article/details/81698264
今日推荐