spring项目中使用定时任务

当我们希望在某个时间点来执行一些业务方法的时候就用到定时任务,在spring的项目中使用定时任务很简单。如下

第一步、加入jar包

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>3.1.0.RELEASE</version>
</dependency>
<!--spring 其他包...-->
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.2</version> </dependency>

第二步、编写任务类

public class TestTask {

    @Autowired
    private XXXService xxxService;

    public void taskMethod1() {
       
          xxxService.doSomeThing();
     }
     public void taskMethod2() { 
    xxxService.doSomeThing2();
}
  //...... }

任务类和普通java类一样,任务方法也和普通方法一样,任务方法中的操作,根据具体的需要来写。

第三步、在spring配置文件中加入配置。

    <!-- 定时任务类 -->
    <bean id="testTask" class="com.xxx.TestTask"/>
    <!-- 任务1  -->
    <bean id="task1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
             <ref bean="testTask" />  
        </property>   
        <property name="targetMethod">   
            <value>testMethod1</value>
        </property> 
    </bean>
    
    <bean id="task1Trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="task1" />
        </property>
        <property name="cronExpression">
            <value>0 0 12 * * ?</value><!-- 表示每天中午12点0分0秒执行-->
        </property>
    </bean>    

    <!--  -->
    <bean id="doTaskTriggerTaskTriggerscheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref  local="task1Trigger"  />
                <!--登记其他的任务触发bean <ref  local="otherTrigger"  /> -->
            </list>
        </property>
    </bean> 

其中 cronExpression 下面的表达式格式为 7位符号 中间加空格拼接而成,可以为6位,用例如下

秒 0-59 , - * /     
分 0-59 , - * /     
小时 0-23 , - * /     
日期 1-31 , - * ? / L W C     
月份 1-12 或者 JAN-DEC , - * /     
星期 1-7 或者 SUN-SAT , - * ? / L C #     
年(可选) 留空, 1970-2099 , - * /     
表达式意义     
"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分钟触发 

 

注:我在使用的时候曾报了很多错误,在网上搜了之后基本都说是spring和quartz版本不兼容的问题,总结如下

错误:Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class

附错误示例及解决方法:参考  https://code.google.com/p/wisematches/issues/detail?id=156

spring3.1.0及以下的版本使用quartz2以下的版本OK

spring3.1.1及以上的版本使用quartz2以下的版本OK  

本例:使用spring3.1.0 + quartz1.8.2 OK

经测试:spring3.1.1+quartz2.1.0  OK

    但是 上面的配置文件中需使用org.springframework.scheduling.quartz.CronTriggerFactoryBean(低版本用的是CronTriggerBean)

      

你可能感兴趣的:(spring项目中使用定时任务)