zoukankan      html  css  js  c++  java
  • Spring框架下的定时任务quartz框架的使用

      手头的这个项目需要用到定时任务,但之前没接触过这东西,所以不太会用,从网上找资料,大致了解了一下,其实也不难。Java的定时任务实现有三种,一种是使用JDK自带的Timer那个类来实现,另一种是使用quartz框架来实现,最后一种是在项目使用Spring框架的情况下用Spring框架来实现。JDK自带的类是单线程的,而且只能定义特定时间去执行任务,而不能指定任务执行的频率,所以一般用的较少,只有处理一些简单的程序才会用到。而quartz是一个轻量级的框架,支持多线程,支持定义频率,所以非常方便。我目前手头这个就是用了SSM框架,所以就用quartz来实现了。下面是详细步骤。

    1.在项目中导入jar包(之前看资料,别人说Spring框架自带quartz,直接可以使用,但自己实践时发现有几个方法不存在,所以就下载jar包导入了)

    Spring的jar包自然是必须的,然后在quartz官网下载jar包(Quartz 2.1.7),解压后导入下面两个包。

    另外要说明的是,Spring框架中必须要有 spring-context-support-4.2.6.RELEASE.jar这个包,配置时好多类都依赖于这个包,所以必须得有。

    后来还发现一个问题,就是spring-beans-4.2.6.RELEASE.jar这个jar包的版本不能太低,4.2.6没问题,但目前已经经过测试得知3.0.5版本绝对会出现无法创建所需要的类的错误信息,出现这种错误只需要再加一个高版本的beans包就可以。

    2.在Spring的配置文件头部定义以下信息

    1 xmlns:task="http://www.springframework.org/schema/task"
    2 xsi:schemaLocation="http://www.springframework.org/schema/beans
    3                     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    4                     http://www.springframework.org/schema/task 
    5                     http://www.springframework.org/schema/task/spring-task-3.0.xsd 

    3.写好自己需要执行的业务逻辑代码

     1 package com.msq;
     2 
     3 public class  TestJobTask{  
     4     /** 
     5      *业务逻辑处理 
     6      */  
     7       public void   service(){  
     8           /**业务逻辑*/  
     9               System.out.println(System.currentTimeMillis());
    10       }  
    11 }

    4.在Spring里面继续作如下配置:

     1     <!-- 定时任务start -->
     2 
     3     <!-- 线程执行器配置,用于任务注册 -->
     4     <bean id="executor"
     5         class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
     6         <property name="corePoolSize" value="10" />
     7         <property name="maxPoolSize" value="100" />
     8         <property name="queueCapacity" value="500" />
     9     </bean>
    10 
    11     <!-- 业务对象 -->
    12     <bean id="testJobTask" class="com.msq.TestJobTask" />
    13 
    14     <!-- 调度业务 -->
    15     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    16         <property name="targetObject" ref="testJobTask" />
    17         <property name="targetMethod" value="service" />
    18     </bean>
    19 
    20     <!-- 增加调用的触发器,触发时间 -->
    21     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    22         <property name="jobDetail" ref="jobDetail" />
    23         <property name="cronExpression" value="0/5 * * * * ? *" />
    24     </bean>
    25 
    26     <!-- 设置调度 -->
    27     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    28         <property name="triggers">
    29             <list>
    30                 <ref bean="cronTrigger" />
    31             </list>
    32         </property>
    33         <property name="taskExecutor" ref="executor" />
    34     </bean>
    35 
    36     <!-- 定时任务end -->

    到此,就配置完了,部署项目到Tomcat,就可以运行了,可以看到在控制台每隔五秒就会输出当前时间。

  • 相关阅读:
    hdu 4496 D-City 并查集
    hdu 1257 小希的迷宫 并查集
    HDU 3974 Assign the task 图论/线段树区间更新,单点查询
    cdoj 1070 秋实大哥打游戏 带权并查集
    NumPy 广播(Broadcast)
    NumPy 高级索引
    NumPy 切片和索引
    NumPy 从数值范围创建数组
    Wasserstein距离
    JS散度
  • 原文地址:https://www.cnblogs.com/plumsq/p/6867094.html
Copyright © 2011-2022 走看看