spring定时任务的两种方法

来源:互联网 发布:ntfs for mac如何用 编辑:程序博客网 时间:2024/05/21 11:16
1.
一共两种方法实现操作。task_1采用继承QuartzJobBean的方法;task_2是采用不继承的方法,配置主要是:
(1).配置JobDetailBean,连接task_1的类名,给属性注入值

     <bean name="task1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
          <property name="jobClass" value="task.Task_1" /> 
          <property name="jobDataAsMap"> 
               <map> 
                    <entry key="time" value="Now is 15:55" /> 
               </map> 
          </property> 
     </bean>  
          <!-- 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,
          jobClass属性即我们在java代码中定义的任务类,
          jobDataAsMap属性即该任务类中需要注入的属性值。 -->

<bean id="task2"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     <property name="targetObject"> 
          <bean class="task.Task_2" /> 
     </property> 
     <property name="targetMethod" value="doTask" /> 
     <property name="concurrent" value="false" /><!-- 作业不并发调度 --> 
</bean>  
          
(2).配置SimpleTriggerBean(按照一定的频度,没隔多长时间调用一次)或者CronTriggerBean(指定具体的时间或者其他执行调用一次)
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
          <property name="jobDetail" ref="task2" /> 
          <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 --> 
          <property name="repeatInterval" value="3000" /><!-- 每5秒调度一次 --> 
     </bean>


<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
          <property name="jobDetail" ref="task2" /> 
     <!--每天什么时间运行一次 --> 
          <property name="cronExpression" value="0 * 16-17 * * ?" /> 
     </bean>
 
(3).配置SchedulerFactoryBean,连接simpleTriggerBean或者CronTriggeerBean。   配置调度工厂
        <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
          <property name="triggers"> 
               <list> 
                    <ref bean="simpleTrigger" /> 
               </list> 
          </property> 
     </bean>  Task_1:

2.
===========================================================================================================
package task;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;


//作业任务一:
//第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。

public class Task_1 extends QuartzJobBean{
     private String time = null;
    

     public String getTime() {
          return time;
     }


     public void setTime(String time) {
          this.time = time;
     }


     @Override
     protected void executeInternal(JobExecutionContext arg0)
               throws JobExecutionException {
          System.out.println("定时任务开始执行中。。。注入的属性值是:"+time.toUpperCase());

         
     }

}


3.
=================================================================================================================

//作业任务二:
Task_2:
package task;


/*
* 第二种,作业类不继承特定基类。
Spring能够支持这种方式,归功于两个类:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。
这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。
* */
public class Task_2 {
    
     public void doTask(){
          System.out.println("this is a task by MethodInvokingJobDetailFactoryBean。。。");
     }

}

=================================================================================================================

//主函数来调动开始:
TestMain:
package task;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMain {
     public static void main(String[] args) {
          new ClassPathXmlApplicationContext("applicationContext.xml");
     }

}



=================================================================================================================
4.
//配置文件:
applicationContext.xml:

<?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:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


     <!-- 采用继承 QuartzJobBean 的方法实现定时任务-->
     <!--  spring配置文件中配置作业类JobDetailBean-->

     <bean name="task1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
          <property name="jobClass" value="task.Task_1" /> 
          <property name="jobDataAsMap"> 
               <map> 
                    <entry key="time" value="Now is 15:55" /> 
               </map> 
          </property> 
     </bean> 
     <!-- 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值。 -->







<!--  不采用继承的方法实现定时任务-->
<bean id="task2"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     <property name="targetObject"> 
          <bean class="task.Task_2" /> 
     </property> 
     <property name="targetMethod" value="doTask" /> 
     <property name="concurrent" value="false" /><!-- 作业不并发调度 --> 
</bean> 
<!-- 
说明:这一步是关键步骤,声明一个MethodInvokingJobDetailFactoryBean,
有两个关键属性:targetObject指定任务类,targetMethod指定运行的方法。往下的步骤就与方法一相同了,为了完整,同样贴出。
-->






     <!--两种继承和不继承的方法都用下面的连个方法触发和调用-->
     <!-- 配置作业调度的触发方式(触发器)
     Quartz的作业触发器有两种,分别是
     org.springframework.scheduling.quartz.SimpleTriggerBean
     org.springframework.scheduling.quartz.CronTriggerBean
     第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
     配置方式如下: -->

     <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
          <property name="jobDetail" ref="task2" /> 
          <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 --> 
          <property name="repeatInterval" value="3000" /><!-- 每5秒调度一次 --> 
     </bean> 

<!--  第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
配置方式如下:-->
     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
          <property name="jobDetail" ref="task2" /> 
     <!--每天什么时间运行一次 --> 
          <property name="cronExpression" value="0 * 16-17 * * ?" /> 
     </bean>




     <!--  配置调度工厂 -->
     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
          <property name="triggers"> 
               <list> 
                    <ref bean="simpleTrigger" /> 
               </list> 
          </property> 
     </bean> 
</beans>



0 0
原创粉丝点击