Spring整合Quartz

  • 如果觉得Quartz麻烦,也可以用JDK自带的Timer类完成定时调度任务
  • 以下示例为定时任务延时10秒后开始启动,每秒执行一次
//定时任务在延时多久后开始启动(毫秒)
long delay=10000L;
//多久执行一次(毫秒)
long period=1000L;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("执行任务");
    }
}, delay, period);
  • schedule方法有多个重载,具体见JDK源码

配置文件

  1. 注册任务所在类的Bean
<bean id="[自取bean的id]" class="com.kingdon.MyDataTimer"/>
  1. 配置定时调度的方法
<bean id="myDataTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="[自取bean的id]"/>
    <property name="targetMethod" value="[执行的方法的方法名]"/>
    <property name="concurrent" value="false"/>
</bean>
  1. 配置定时调度任务
  • 只执行一次
<bean id="myDataTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
    <property name="jobDetail" ref="myDataTask"/>
    <property name="startDelay" value="20"/>//执行延迟
    <property name="repeatInterval" value="0"/>//重复间隔
    <property name="repeatCount" value="0"/>//重复次数
</bean>
  • 定期执行
<bean id="myDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail">
        <ref bean="myDataTask"/>
    </property>
    <property name="startDelay" value="120"/>//执行延迟
    <property name="cronExpression" value="[cron表达式]">
    </property>
</bean>
  1. 配置启动器
<bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"
      autowire="no">
    <property name="triggers">
        <list>
            <ref bean="myDataTrigger"/>
        </list>
    </property>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.threadPool.threadCount">1</prop>
        </props>
    </property>
</bean>

cron表达式crom语法

基础
  • 秒(0-59)
  • 分(0-59)
  • 小时(0-23)
  • 日(1-31)
  • 月(1-12)
  • 星期几(1-7,1代表星期日)
  • 年(1970-2099,可选域)
符号
  • 通配符(*):当前域的每个值
  • 无指定值(?)
  • 当设置日,不设置星期几;当设置星期几,不设置日
  • 值增量(/)
    3/7 * * * * ?——第3秒开始,每7秒匹配成功一次
  • 时间段(-)
    3-7 * * * * ?——每分钟的第3~7秒
  • 连接多个值(,)
    3,5,7 * * * * ?——每分钟的第3,5,7秒
  • Last(L)——当L作用在日上,代表这个月的最后一作用在星期几上时,代表这个月的最后一个星期几
    1L:每月的最后一个周日
    5L:每月的最后一个周四
举例如下

每秒执行一次
0/1 * * * * ?
每隔5秒执行一次
0/5 * * * * ?
每隔1分钟执行一次
0 0/1 * * * ?
每天23点执行一次
0 0 23 * * ?
每天凌晨1点执行一次
0 0 1 * * ?
每月1号凌晨1点执行一次
0 0 1 1 * ?
每月最后一天23点执行一次
0 0 23 L * ?
每周星期天凌晨1点实行一次
0 0 1 ? * 1
在26分、29分、33分执行一次
0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次
0 0 0,13,18,21 * * ?
每隔10秒执行一次
0/10 * * * * ?
朝九晚五工作时间内每半小时
0 0/30 9-17 ? * 2-6
每隔五分钟执行一次
0 0/5 * * * ?
每天23点59分执行一次
0 59 23 * * ?
每天凌晨一点执行一次
0 0 1 * * ?
每月最后一天23点执行一次
0 0 23 L * ?
在每周一、三、五的9点、12点、18点、23点都执行一次
0 0 9,12,18,23 ? * 2,4,6
每天12点触发
0 0 12 * * ?
每天10点15分触发
0 15 10 * * ?
2005年每天10点15分触发
0 15 10 * * ? 2005
每天下午2点到2点59分每分触发(每天下午两点每一分钟都触发)
0 * 14 * * ?
每天下午2点到2点59分(整点开始,每隔5分触发)
0 0/5 14 * * ?
每天下午2点到2点05分每分触发
0 0-5 14 * * ?
从周一到周五每天上午的10点15分触发
0 15 10 ? * 2-6
每月15号上午10点15分触发
0 15 10 15 * ?
每月最后一天的10点15分触发
0 15 10 L * ?
每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L
从2002年到2005年每月最后一周的星期六的10点15分触发
0 15 10 ? * 7l 2002-2005
2011年的11月11号11点11分11秒触发
11 11 11 11 11 ? 2011
每半分钟触发任务
0/30 * * * * ?
每小时的10分30秒触发任务
30 10 * * * ?
每天1点10分30秒触发任务
30 10 1 * * ?
每月20号1点10分30秒触发任务
30 10 1 20 * ?
每年10月20号1点10分30秒触发任务
30 10 1 20 10 ?
2011年10月20号1点10分30秒触发任务
30 10 1 20 10 ? 2011
2011年10月每天1点10分30秒触发任务
30 10 1 * 10 ? 2011
2011年10月每周日1点10分30秒触发任务
30 10 1 ? 10 1 2011
每15秒,30秒,45秒时触发任务
15,30,45 * * * * ?
15到45秒内,每秒都触发任务
15-45 * * * * ?
每分钟的每15秒开始触发,5秒触发一次
5/15 * * * * ?
每小时的第0分0秒开始,每三分钟触发一次
0 0/3 * * * ?
星期一到星期五的10点15分0秒触发任务
0 15 10 ? * 2-6
每个月最后一天的10点15分0秒触发任务
0 15 10 l * ?
每个月最后一个工作日的10点15分0秒触发任务
0 15 10 ? * 6l
每个月最后一个星期四的10点15分0秒触发任务
0 15 10 ? * 5l

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值