spring 用quartz实现定时任务代码案例

spring | 2019-09-13 10:02:39

1.maven配置spring和定时任务jar包

<dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-context</artifactId>
                        <version>3.1.1.RELEASE</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-context-support</artifactId>
                        <version>3.1.1.RELEASE</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-tx</artifactId>
                        <version>3.1.1.RELEASE</version>
                </dependency>
                <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-web</artifactId>  
            <version>3.0.5.RELEASE</version>  
        </dependency> 
                <dependency>
                        <groupId>org.quartz-scheduler</groupId>
                        <artifactId>quartz</artifactId>
                        <version>1.8.5</version>
                </dependency>

2.xml中配置定时任务(quartzJob.xml)

<!-- 定义目标bean和bean中的方法 -->  
        <!-- =====================日常任务job========================== -->
    <bean id="DailyTaskQtzJob" class="com.test.quartz.DailyTaskJob">
    </bean>  
    <bean id="DailyTaskQtzJobMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
            <property name="targetObject">  
                <ref bean="DailyTaskQtzJob"/>  
            </property>  
                    <property name="targetMethod">  <!-- 要执行的方法名称 -->  
                <value>execute</value>  
            </property>  
        </bean> 
  
        <!-- ======================== 调度触发器 ======================== -->  
  <bean id="DailyTaskCronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">  
            <property name="jobDetail" ref="DailyTaskQtzJobMethod"></property>  
            <!-- 每天下午16:30触发   -->
            <property name="cronExpression" value="0 30 16 ? * *"></property>
        </bean>  
  
        <!-- ======================== 调度工厂 ======================== -->  
        <bean id="SpringJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
                    <property name="triggers">  
                <list>   
                    <ref bean="DailyTaskCronTriggerBean"/> 
                </list>  
            </property>  
        </bean>

3.要执行的java代码(DailyTaskJob.java)

package com.test.quartz;
public class DailyTaskJob {        
        protected void execute() {
                 //执行任务
        }
}

4.在web.xml中添加quartzJob.xml,web服务启动时就执行定时任务

<context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                        WEB-INF/beans.xml
                        WEB-INF/quartz/quartzJob.xml
                </param-value>
        </context-param>

5.动态cronExpression的配置介绍

<!--
   一个cronExpression表达式有到少6个(也可能是7个)由空格分隔的时间元素.从左到右,这些元素的定义如下:  
      1.秒(0-59)  
      2.分钟(0-59)  
      3.小时(0-23)  
      4.月份中的是期(1-31)  
     5.月份(1-12或SUN-DEC)  
      6.星期中的日期(1-7或SUN-SAT)  
      7.年份(1970-2099)   
     例子:  
      0 0 10,14,16 * * ? 每天上午10点,下午2点和下午4点  
      0 0,15,30,45 * 1-10 * ? 每月前10天每隔15分钟  
      30 0 0 1 1 ? 2012 在2012年1月1日午夜过30秒时  
      0 0 8-5 ? * MON-FRI 每个工作日的工作时间         
      - 区间 
      * 通配符  
      ? 你不想设置那个字段  
--> 


时间配置:
"0/10 * * * * ?" 每10秒触发
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 
每隔5秒执行一次:*/5 * * * * ? 
每隔1分钟执行一次: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 ? * L 
在26分、29分、33分执行一次:0 26,29,33 * * * ? 
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

登录后即可回复 登录 | 注册
    
关注编程学问公众号