spring实现任务调度

使用spring+quartz实现任务调度

这里使用的是spring 2.5

相关的jar文件:

commons-collections-3.1.jar,jta.jar,quartz-all-1.6.0.jar,spring.jar,spring-context.jar,spring-context-support.jar

1. web.xml ,配置spring

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

2. 编写任务类 QuartzJob1

public class QuartzJob1

    public void work(){  

        task1();  

    }  

    public void task1(){  

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        System.out.println(df.format(new Date().getTime())+" 调度任务1  每隔5秒钟执行一次");  

    }  

 }

3. quartz 配置(applicationContext.xml)

<!-- 定时器配置 -->

  <!-- 任务1 -->

<bean id="quartzJob1" class="com.timer.job.QuartzJob1" >

<!--<property name="publishDao" ref="publishDao" />-->

</bean>

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

<property name="targetObject">

<ref bean="quartzJob1" />

</property>

<property name="targetMethod">

<value>work</value>

</property>

 <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->  

         <property name="concurrent" value="true"/>  

</bean>

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

<property name="jobDetail">

<ref bean="jobtask1" />

</property>

<property name="cronExpression">

 <!-- 每隔5秒执行一次 <value>0/10 * * * * ?</value> -->  

 <!-- 每隔10秒执行一次 <value>0/10 * * * * ?</value> -->  

          <!-- 每天每隔10分钟执行一次 <value>0 0/10 * * * ?</value> -->

<value>0/5 * * * * ?</value>

</property>

</bean>

<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->  

<bean id="startQuertz" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="cronTrigger1" />

</list>

</property>

</bean>

<!-- 定时器END -->

启动web服务器,可以看到spring任务已经按周期性的执行了,大功告成。

原文链接:

http://blog.csdn.net/u013614451/article/details/40711643

另一种配置方法,服务器启动后执行一次任务然后再周期性执行任务,使用SimpleTriggerBean

 <!-- 定时扫描周期,如果已到期,则结束周期 -->
    <!-- 定时任务的工作Bean,普通的Java类 -->
     <bean id="quartzJob" class="com.gy.xf.task.TestJob" >
     		<property name="dao" ref="alarmFireDispatchDao"></property>
     </bean>
       <!-- 定义生成工作对象的工厂,并为工厂设定目标对象targetObject属性、目标对象的工作方法targetMethod属性 -->
     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject" ref="quartzJob"/>
       <property name="targetMethod">
         <value>test</value>
       </property>
       <property name="concurrent" value="false"/>
     </bean>
     <!-- 任务调度计时器,进行定时设置。CronTriggerBean能进行非常精确的定时设置 -->
     <bean id="cronQuartzClock1" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail" />
        <!-- cron表达式 -->
        <property name="cronExpression">
            <!--   0 0 */2 * * ? 每两小时、整点触发 -->
            <!--   0 0/2 * * * ? 每两分钟  -->
            <!--   0/5 * * * * ? 每五秒钟  -->
            <!--   0 15 10 * * ? 每天Y分X点触发  -->
            <value>0 0 */1 * * ?</value>
        </property>
    </bean>
    <bean id="workflowTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
        <property name="jobDetail" ref="jobDetail" />  
        <!-- 这里定义的是服务启动后多少秒之后启动定时器,单位是毫秒,下面设置的是十秒 -->  
        <property name="startDelay" value="10000" />  
        <!-- 这里定义的是循环的周期,单位是毫秒 -->  
        <property name="repeatInterval" value="120000" />  
    </bean>  
    <!-- 调度任务触发器,启动定时任务-->
    <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">
            <list>	
                <ref bean="workflowTrigger"/>
            </list>
        </property>
    </bean>

猜你喜欢

转载自zgphacker2010.iteye.com/blog/2367700
今日推荐