Spring中的任务调度任务

在实际开发应用中,经常需要定时,或者重复执行一定的工作。比如为执行每日构件;定期生成企业报表,包括周、月、季度等;零售领域中门店的日结、月结等。
Quartz为任务调度提供了大量的功能,比如在合适执行何种任务。
一、需要定义一个类来继承QuartzJobBean,其中定义timeout属性,并且实现executeInternal()方法,抽象类QuartzJobBean用于定义待完成的任务本身。开发者通过继成 QuartzJobBean,即实现其中的executeInternal方法,就可以了,该方法用于定义待完成的任务。
public class LogJobBean extends QuartzJobBean{
        private int timeout;
        public void setTimeout(int timeout){
                this.timeout=timeout;
}
Protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException{
        System.out.println(“create LogBean()……….”);
}
}
二、Spring的配置文件的配置如下:
Spring框架提供了SimpleTriggerBean来定义JobDetailBean的运行频率和初始化运行时机。通过jobDetail属性指定待执行的任务(比如logJob);通过repeatInterval属性指定任务执行的频率(比如两秒执行一次executeInternal方法);通过startDelay属性指定在初次执行任务前必须等待的时间;通过repartCount属性指定任务执行的次数。startDelay属性仅仅是给出了初次任务执行的相对时间,而不是绝对时间。比如商务9:30。如果需要精确到某时某刻,则需要使用Quartz的CronTriggerBean。
为启动SimpleTriggerBean,还需要配置SchedulerFactoryBean,即启动Scheduler器。通过triggers属性能够指定多有计划,即SimpleTriggerBean。
其中借助于jobClass属性指定任务本身,比如LogJobBean,借助于jobDataAsMap属性指定LogJobBean中定义的属性(属性必须提供set方法)。
<beans>
        <bean name=”logJob” class=”org.springframework.scheduling.quartz.JobDetailBean”
                <property name=”jobClass”>
                        <value>…….LogJobBean</value>
                </property>
                <property name=”jobDataAsMap”>
                        <map>
                                <entry key=”timeout”>
                                        <value>10</value>
                                </entry>
                        </map>
                </property>
        </bean>
        <bean id=”simpleTrigger” class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>
                <property name=”jobDetail”>
                        <ref  bean=”logJob”/>
                </property>
        <!—第一次执行任务前,需要等待5秒钟-->
                <property name=”startDelay”>
                        <value>5000</value>
                </property>
<!—任务执行周期为2秒钟-->
<property name=”repeatIntegerval”>
                        <value>2000</value>
                </property>
        <!—执行次数-->
<property name=”repeatCount”>
                        <value>3</value>
                </property>
        </bean>
        <bean id=”sfb” class=”org.springframework.scheduling.quartz.SchedulerFactoryBean”>
        <property name=”triggers”>
                <list>
                        <ref  local=”simpleTrigger”/>
                </list>
        </property>
        </bean>
</beans>
三、客户端的应用,借助于BeanFactory获得Scheduler后,安排的任务可以根据设定的运行规则执行。
public class LogJobBeanTest{
        public static void main(String[] args){
                Resource resource = new ClassPathResource(“appcontext.xml”);
                BeanFactory factory = new XmlBeanFactory(resource);
                Scheduler sfb=(Scheduler)factory.getBean(“sfb”);
                try{
                        Thread.sleep(20000);
}catch(InterruptedException e){}
try{
                        sfb.shutdown();
}catch(SchedulerException se){}
}       
}
本文引用地址:http://www.cnpoint.com/framwwork/2007/0816/content_5550.htm

你可能感兴趣的:(spring,框架,xml,quartz,企业应用)