加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

spring项目中使用定时任务

发布时间:2021-05-21 07:22:56 所属栏目:大数据 来源: https://www.jb51.cc
导读:当我们希望在某个时间点来执行一些业务方法的时候就用到定时任务,在spring的项目中使用定时任务很简单。如下 第一步、加入jar包 dependency groupId org.springframework / artifactId spring-context-support version 3.1.0.RELEASE !--spring 其他包...--

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

第一步、加入jar包

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

第二步、编写任务类

public class TestTask {

    @Autowired
    private XXXService xxxService;

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

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

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

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

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

其中 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分钟触发 

  • 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
  • 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。
    字母 L 字符是?last?的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
  • 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
  • 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
  • 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。

?

注:我在使用的时候曾报了很多错误,在网上搜了之后基本都说是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)

   ? ?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读