QuartZ--Spring中定时任务的实现

最近在做一个拍卖项目中需要用到定时任务,我们采用的框架是spring mvc的,所以我在考虑集成定时任务方式的时候就选择了我们常用的Quartz,主要是因为他的实现方式比较简单,而且我们在做配置的时候也是方便修改的。

7aec54e736d12f2e65433f194dc2d56285356801.jpg

下面我们简单来说下Quartz应用的场景,在我们的项目中,存在一个拍品的有效时常,在这个有效的时常之内任何买家都是可以参与竞价的,当达到拍卖结束时间的时候我们就要通过运算使得这件拍品被价高者得到,这个时候需要生产订单等一系列的操作,那我们在我们的应用中如何知道某个拍品是否达到结束时间并且生成订单等相关操作,这个时候我们就需要定时调度去做这件事情,以帮助我们减少人工开销,说白了就是指定某件事情在什么时候去做!

下面我们就说说如何在我们的Spring框架中集成和使用Quartz,以方便我们程序的使用:

①由于我们是使用maven做项目依赖包管理的,所以我们第一步需要做的是新增我们的Quartz依赖!

1
2
3
4
5
6
7
8
9
10
11
12
< dependency >
   < groupId >org.quartz-scheduler</ groupId >
   < artifactId >quartz</ artifactId >
   < version >1.8.0</ version >
   </ dependency >
< dependency >
< dependency >
     < groupId >commons-collections</ groupId >
     < artifactId >commons-collections</ artifactId >
     < version >20040616</ version >
</ dependency >
        

②前面也说道我们采用Quartz的目的是让他在指定的时间去帮助我们做指定的业务,所以我们需要写出我们的业务代码,我们的业务代码和其他的java类方法实现一样,属于同一层次下!

1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.xiaocui.quartz;
 
public  class  QuartzJob {
     
     public  void  work() {  //这里就是具体的业务代码实现方法,可以建立多个实现不同的业务!
         try  {
             logger.error( "Hello, QuartZ 启动成功了!" );
         catch  (Exception e) {
             logger.error(e, e);
         }
     }
 
}

③前面的两步我们把我们业务要做的事情都准备好了,那最后一步就是让我们的业务嵌入到现有的框架代码中,让他能在指定的时间去执行业务,前面我们说到采用Quartz的原因之一是因为他方便配置,下面我们就采用xml配置文件的方式让他嵌入到我们的框架中!

首先我们在我们的【resources】文件夹创建一个我们的xml文件,这里我命名为【spring-quartz.xml】,里面具体的实现内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<? xml  version = "1.0"  encoding = "UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
< beans >    
         <!-- 要调用的工作类 -->
         < bean  id = "quartzJob"  class = "com.xiaocui.quartz.QuartzJob" ></ bean >
         
         <!-- 定义调用对象和调用对象的方法 这里就是定义具体的业务代码实现方法-->
         < bean  id = "jobtask"  class = "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
             <!-- 调用的类 -->
             < property  name = "targetObject" >
                 < ref  bean = "quartzJob" />
             </ property >
             <!-- 调用类中的方法 -->
             < property  name = "targetMethod" >
                 < value >work</ value >
             </ property >
             
         </ bean >
         <!-- 定义触发时间 -->
         < bean  id = "doTime"  class = "org.springframework.scheduling.quartz.CronTriggerBean" >
             < property  name = "jobDetail" >
                 < ref  bean = "jobtask" />
             </ property >
             <!-- cron表达式 -->
             < property  name = "cronExpression" >
                  < value >0 0/1 * * * ?</ value >    <!--这里采用的是QuartZ Cron表达式-->
             </ property >
         </ bean >
         
         
         
         <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
         < bean  id = "startQuertz"  lazy-init = "false"  autowire = "no"  class = "org.springframework.scheduling.quartz.SchedulerFactoryBean" >
             < property  name = "triggers" >
                 < list >
                     < ref  bean = "doTime" />
                 </ list >
             </ property >
         </ bean >
     
</ beans >

通过上上面的spring-quartz.xml的配置我们的业务代码已经和quartz有了结合,但是这个时候我们的quartz还没有和Spring结合到一起,想要将他们结合到一起只需要一句代码就可以,就是在我们的web.xml启动项中添加启动就可以了,大致代码如下:

1
2
3
4
5
6
< context-param >
     < param-name >contextConfigLocation</ param-name >
         < param-value >classpath:spring.xml,classpath:spring-mybatis.xml,classpath:spring-quartz.xml</ param-value >
         <!-- classpath:spring-quartz.xml 用于做任务调度 任务定时都可以 添加就执行-->
     </ context-param >
< context-param >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值