spring+quartz任务定制总结


在北京出差,周末在宾馆有空,把spring任务机制重新捋了一下。

用到的版本:spring3.1,quartz1.8.5,jdk1.6

要实现定时执行任务的功能,

首先有个非常重要的信息:任务定时间需要单独新建一个xml文件进行配置,切不可与spring的其他配置文件(如applicationConfig.xml)放在一起,否则任务不能执行,在此,我们新建了一个配置文件:applicationConfig-jobCfg.xml。
其次需要有需要执行的方法类,由于下面有java本身的任务定时器,也有基于quartz的,所以下面我们给这两种方式分别新建了一个类:
如下:
---------------------------------------------------------------------------------------------------------------

这个是用quartz实现的(如果是用JobDetailBean来配置任务,则不需要继承QuartzJobBean)

public class QuartzTest extends QuartzJobBean{
private  static Integer INFO = 1;
private  static Integer INFO1 = 1;

    public void printHello(){
        System.out.println("----------QuartzTest,我是第1个方法哦---------- hello:"+INFO+"   时间:"+new Date());
        INFO++;
    }
    
    public void printHello1(){
        System.out.println("----------QuartzTest,我是第2个方法哦---------- hello:"+INFO1+"   时间:"+new Date());
        INFO1++;
    }


@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
// TODO Auto-generated method stub
printHello();

}

}

-------------------------------------------

这个是基于java实现的:
public class MyTimeTask extends TimerTask {
private  static Integer INFO = 1;

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("----------MyTimeTask---------- hello,"+INFO+"   时间:"+new Date());
INFO++;
}

}

---------------------------------------------------------------------------------------------------------------

以下每一个代码框中的配置文件是各种情况下的独立配置,可以直接运行的(后面三个需要加上第一个的头文件 )。  大笑    


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

<!-- quartz定制任务 -开始  -->

<!-- 用MethodInvokingJobDetailFactoryBean来定制任务,是不需要继承QuartzJobBean的。 -->
<bean id="quartzTest" class="com.veivo.ppq.action.admin.QuartzTest"/>
<!-- 调度业务  -->
<bean id="mytestQuartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzTest"></property><!-- 任务调用的类  -->
<property name="targetMethod" value="printHello"></property>
<!-- 任务调用类的方法,不可定义多个方法,若一个方法中有多个方法需要调用,则可以定义多个Trigger,本文最后有个例子  -->
<property name="concurrent" value="false"/><!-- 设置不可并发  -->
</bean>


<!-- 增加调度触发器  -->
<bean id="cronTrigger" lazy-init="false"  class="org.springframework.scheduling.quartz.CronTriggerBean">
<!--每隔10秒执行一次。-->
<property name="jobDetail" ref="mytestQuartz"></property>
<property name="cronExpression" value="*/10 * * * * ? "></property>
</bean>


<!-- 设置调度   -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
<property name="autoStartup" value="true"/> 
</bean>


<!-- 定制任务 -结束  -->

</beans>

-----------------------------------------------------------------------------------------------------------------------------------------

<!-- quartz定制任务 -开始  -->

<!-- 用JobDetailBean就不需要配置targetObject或targetBean,如下配置就可,但是需要继承QuartzJobBean,在QuartzTest中会继承一个方法executeInternal来执行任务 -->
<bean id="mytestQuartz" class="org.springframework.scheduling.quartz.JobDetailBean">   
<property name="jobClass" value="com.veivo.ppq.action.admin.QuartzTest"/>
</bean>


<!-- 增加调度触发器  -->
<bean id="cronTrigger" lazy-init="false"  class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<!--每隔5秒执行一次,延迟10秒执行。-->
<property name="jobDetail" ref="mytestQuartz"></property>
<property name="startDelay">   
   <value>10000</value>   
</property>   
<property name="repeatInterval">   
   <value>5000</value>   
</property>  
</bean>

<!-- 设置调度   -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
<property name="autoStartup" value="true"/> 
</bean>

------------------------------------------------------------------------------------------------------------------------

<!-- java定制任务 -开始  -->


<!-- 用JobDetailBean需要继承TimerTask,在MyTimeTask中会继承一个方法run来执行任务 -->
<bean id="myTimeTask" class="com.veivo.ppq.action.admin.MyTimeTask"/>

<bean id="scheduleTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="myTimeTask" />
<!--每隔5秒执行一次,延迟10秒执行。-->
<property name="period">
<value>5000</value>
</property>
<property name="delay">
<value>10000</value>
</property>
</bean>

<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduleTask" />
</list>
</property>
</bean>

<!-- java定制任务 -结束  -->

------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
<!-- quartz定制多个任务   -->


<!-- 定制任务 -开始  -->

<bean id="quartzTest" class="com.veivo.ppq.action.admin.QuartzTest"/>
<!-- 调度业务  -->
<bean id="mytestQuartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzTest"></property>
<property name="targetMethod" value="printHello"></property>
<property name="concurrent" value="false"/>
</bean>

<bean id="mytestQuartz1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzTest"></property>
<property name="targetMethod" value="printHello1"></property>
<property name="concurrent" value="false"/>
</bean>

<!-- 增加调度触发器  -->
<bean id="cronTrigger" lazy-init="false"  class="org.springframework.scheduling.quartz.CronTriggerBean">
<!--每隔2秒执行一次。-->
<property name="jobDetail" ref="mytestQuartz"></property>
<property name="cronExpression" >
<value>*/2 * * * * ?</value>
</property>
</bean>

<bean id="cronTrigger1" lazy-init="false"  class="org.springframework.scheduling.quartz.CronTriggerBean">
<!--每隔4秒执行一次。-->
<property name="jobDetail" ref="mytestQuartz1"></property>
<property name="cronExpression" >
<value>*/4 * * * * ?</value>
</property>
</bean>

<!-- 设置调度   -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<!-- 
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:quartz.properties"/>
-->
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
<ref bean="cronTrigger1"/>
</list>
</property>
</bean>

<!-- 定制任务 -结束  -->


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值