Spring 自动定时任务配置

Spring中可以通过配置方便的实现周期性定时任务管理,这需要用到以下几个类:
 
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean--配置需要调度的Bean的某个方法
org.springframework.scheduling.quartz.SimpleTriggerBean--定时器,负责配置启动时间、执行周期
org.springframework.scheduling.quartz.SchedulerFactoryBean--触发器,负责配置所有定时器
 
实例如下:

 

[java]  view>"taskService" class="com.mrd.task.TaskService"></bean>  
  • <bean  id="autoTask"  class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  •          <property  name="targetObject">  
  •             <ref  bean="taskService"/>    
  •          </property>  
  •          <property name="targetMethod">  
  •             <value>doTask</value>  
  •          </property>  
  • </bean>  
  • <bean id="autoTaskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  •     <property name="startDelay"><value>300000</value></property>  
  •     <property name="repeatCount"><value>-1</value></property>  
  •     <property name="repeatInterval"><value>28800000</value></property>  
  •     <property name="jobDetail"><ref bean="autoTask" /></property>  
  • </bean>  
  • <bean id ="triggersStarter" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" singleton="true">    
  •     <property  name="triggers">    
  •            <list>    
  •                <ref bean="autoTaskTrigger"/>  
  •            </list>    
  •     </property>  
  •     <property name="autoStartup">  
  •             <value>true</value>  
  •     </property>  
  • </bean >   

注意以上4个Bean需要按顺序配置,从配置属性的字面意思,应该很容易理解具体的参数含义。
另外对SchedulerFactoryBean的使用需要注意以下几个方面:
 
 
 
1、SchedulerFactoryBean会自动启动。
当在spring文件中定义了多个SchedulerFactoryBean实例时,一定要小心,因为这些ScheduleFactoryBean自从load进程序里,就会自动启动。如果要手动控制,注意要将autoStartup属性设置为false,注意如果没有singleton="true",SchedulerFactoryBean就不是单独存在的,autoStartup也就不能很好的手动控制
定时器。
 
2、SchedulerFactoryBean暴露的是Scheduler,而不是SchedulerFactoryBean。
SchedulerFactoryBean实现了FactoryBean接口,必须实现两个方法,一个是getObjectType,另外一个则是getObject;其中getObjectType定义了返回的类型应该为Scheduler,而getObject指定了返回的是其一个重要属性scheduler,这个scheduler就是我们要获得的调度。
 
若在配置文件里为SchedulerFactoryBean定义了id属性为"scheduler",则在程序里调用getBean时,需要注意getBean("scheduler")返回的是Scheduler对象
 
3、
SchedulerFactoryBean中有两个很重要的属性,一个是scheduler,另外一个是schedulerFactoryClass,spring通过用schedulerFactoryClass做代理来产生调度,并把它赋给scheduler。
 
private Class>
//如果你没有指定schedulerFactoryClass ,那么它用的是quartz中自带的调度工厂,
this.scheduler =>
//这个sched就是要代理生成的scheduler,getSchedulerName只有一句话,如下:
cfg.getStringProperty(PROP_SCHED_INSTANCE_NAME,"QuartzScheduler");
//如果我们没有使用一些特殊的机制,那么返回的只能是一个固定的字符串。
 
如上说述,如果我们希望不进行改造,就在spring的配置文件中定义多个调度的方法来实现我们个性化的任务安排时,可能并不可行。因为spring配置的scheduler只能有一个,即使你定义了多个调度,那么其实实现的只有一个,只是所有你希望指向不同调度的id都会指向它罢了,而这个调度会包含了其它所有调度中的任务。
 
 
4、抱错:org.quartz.SchedulerException: Repeat Interval>http://aniyo.iteye.com/blog/1441585

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值