您的位置:首页 > 编程语言 > Java开发

Spring使用Quartz配置调度事物

2013-07-25 20:23 363 查看
首先编写服务类:


package QuartzTest;




import java.util.Date;






public
class CourseService
...{




  
public
void start()...{


       System.out.println(new Date().getSeconds());


   }


}



编写调度类,需要继承QuartzJobBean :


package QuartzTest;




import org.quartz.JobExecutionContext;


import org.quartz.JobExecutionException;


import org.springframework.scheduling.quartz.QuartzJobBean;








public
class QuartzJob
extends QuartzJobBean
...{   


   




   
protected
void executeInternal(JobExecutionContext arg0)
throws JobExecutionException
...{


        courseService.start();


    }




   
private CourseService courseService;






   
public CourseService getCourseService()
...{


       
return courseService;


    }






   
public
void setCourseService(CourseService courseService)
...{


       
this.courseService
= courseService;


    }


   




}



编写配置文件

需要说明的是,我们有两种trigger,分别是simple和cron模式,simple方式和timertask类似,采用设置interval方式进行调度,而cron可以特有的语法很详细的定制调度执行时间,具体描述在配置文件的注释中


<?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="courseService" class="QuartzTest.CourseService"/>


  
<!-- 创建调度任务 使用单独编写的调度类QuartzJob   
-->


  
<bean id="reportJbo" class="org.springframework.scheduling.quartz.JobDetailBean">


    
<property
name="jobClass">


      
<value>QuartzTest.QuartzJob</value>


    
</property>


    
<property
name="jobDataAsMap">


      
<map>
         <!--采用jobDataAsMap方式进行courseService注入-->


        
<entry key="courseService">


          
<ref bean="courseService"/>


         
</entry>


      
</map>


    
</property>


  
</bean>




  
<!-- 创建调度任务 使用已有的service类方法,不需要单独编写调度类QuartzJob


   <bean id="reportJbo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">


     <property name="targetObject">


      <ref bean="courseService"/>


     </property>


     <property name="targetMethod">


        <value>start</value>


     </property>


   </bean>


   
-->


  
<!-- 配置调度任务,简单模式  
-->


  
<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">


     
<property
name="jobDetail">


       
<ref bean="reportJbo"/>


     
</property>


     
<property
name="repeatInterval">


       
<value>1000</value>


     
</property>


  
</bean>




  
<!-- 配置调度任务,复杂定制模式,月份中的日期和星期不能同时设置  
-->


  
<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">


     
<property
name="jobDetail">


       
<ref bean="reportJbo"/>


     
</property>


     
<property
name="cronExpression">


       
<value>02 20 21 7 6 ? 2007</value>


       
<!-- 1.秒 0-59


             2.分钟 0-59


             3.小时 0-23


             4.月份中的日期 1-31


             5.月份 1-12或者Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec


             6.星期中的日期 1-7或者MON,TUE,WED,THU,FRI,SAT,SUN.


       
-->


     
</property>


  
</bean>




  
<!-- 启动调度
-->


  
<bean id="start" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">


    
<property
name="triggers">


      
<list>


        
<ref bean="cronReportTrigger"/>


      
</list>


    
</property>


  
</bean>


</beans>





Spring还为我们提供了更简单的加载调度的方式,也就说我们在已经有业务方法CourseService时不需要再额外编写调度类QuartzJob,可以直接配置service的方法

<bean id="reportJbo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

     <property name="targetObject">

      <ref bean="courseService"/>

     </property>

     <property name="targetMethod">

        <value>start</value>

     </property>

   </bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: