一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring 自動(dòng)定時(shí)任務(wù)配置

 純屬愛(ài) 2015-12-28

  

Spring中可以通過(guò)配置方便的實(shí)現(xiàn)周期性定時(shí)任務(wù)管理,這需要用到以下幾個(gè)類(lèi):
 
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean--配置需要調(diào)度的Bean的某個(gè)方法
org.springframework.scheduling.quartz.SimpleTriggerBean--定時(shí)器,負(fù)責(zé)配置啟動(dòng)時(shí)間、執(zhí)行周期
org.springframework.scheduling.quartz.SchedulerFactoryBean--觸發(fā)器,負(fù)責(zé)配置所有定時(shí)器
 
實(shí)例如下:

 

  1. <bean id="taskService" class="com.mrd.task.TaskService"></bean>  
  2. <bean  id="autoTask"  class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  3.          <property  name="targetObject">  
  4.             <ref  bean="taskService"/>    
  5.          </property>  
  6.          <property name="targetMethod">  
  7.             <value>doTask</value>  
  8.          </property>  
  9. </bean>  
  10. <bean id="autoTaskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  11.     <property name="startDelay"><value>300000</value></property>  
  12.     <property name="repeatCount"><value>-1</value></property>  
  13.     <property name="repeatInterval"><value>28800000</value></property>  
  14.     <property name="jobDetail"><ref bean="autoTask" /></property>  
  15. </bean>  
  16. <bean id ="triggersStarter" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" singleton="true">    
  17.     <property  name="triggers">    
  18.            <list>    
  19.                <ref bean="autoTaskTrigger"/>  
  20.            </list>    
  21.     </property>  
  22.     <property name="autoStartup">  
  23.             <value>true</value>  
  24.     </property>  
  25. </bean >   

注意以上4個(gè)Bean需要按順序配置,從配置屬性的字面意思,應(yīng)該很容易理解具體的參數(shù)含義。
另外對(duì)SchedulerFactoryBean的使用需要注意以下幾個(gè)方面:
 
 
 
1、SchedulerFactoryBean會(huì)自動(dòng)啟動(dòng)。
當(dāng)在spring文件中定義了多個(gè)SchedulerFactoryBean實(shí)例時(shí),一定要小心,因?yàn)檫@些ScheduleFactoryBean自從load進(jìn)程序里,就會(huì)自動(dòng)啟動(dòng)。如果要手動(dòng)控制,注意要將autoStartup屬性設(shè)置為false,注意如果沒(méi)有singleton="true",SchedulerFactoryBean就不是單獨(dú)存在的,autoStartup也就不能很好的手動(dòng)控制
定時(shí)器。
2、SchedulerFactoryBean暴露的是Scheduler,而不是SchedulerFactoryBean。
SchedulerFactoryBean實(shí)現(xiàn)了FactoryBean接口,必須實(shí)現(xiàn)兩個(gè)方法,一個(gè)是getObjectType,另外一個(gè)則是getObject;其中getObjectType定義了返回的類(lèi)型應(yīng)該為Scheduler,而getObject指定了返回的是其一個(gè)重要屬性scheduler,這個(gè)scheduler就是我們要獲得的調(diào)度。
若在配置文件里為SchedulerFactoryBean定義了id屬性為"scheduler",則在程序里調(diào)用getBean時(shí),需要注意getBean("scheduler")返回的是Scheduler對(duì)象
3
SchedulerFactoryBean中有兩個(gè)很重要的屬性,一個(gè)是scheduler,另外一個(gè)是schedulerFactoryClass,spring通過(guò)用schedulerFactoryClass做代理來(lái)產(chǎn)生調(diào)度,并把它賦給scheduler。
private Class schedulerFactoryClass = StdSchedulerFactory.class;
//如果你沒(méi)有指定schedulerFactoryClass ,那么它用的是quartz中自帶的調(diào)度工廠,
this.scheduler = createScheduler(schedulerFactory, this.schedulerName);
//這里的schedulerName默認(rèn)傳進(jìn)來(lái)是空的,其實(shí)如果你不是用自己定義的schedulerFactoryClass
//恐怕也沒(méi)有什么意義,因?yàn)閏reateScheduler是這樣調(diào)用的
return schedulerFactory.getScheduler();
//顯然schedulerName并沒(méi)有用到,除非是你自行寫(xiě)一個(gè)schedulerFactory,并做好相應(yīng)處理,
//否則返回的這個(gè)scheduler一定是一個(gè)指定名稱(chēng)的調(diào)度
Scheduler sched = schedRep.lookup(getSchedulerName());
//這個(gè)sched就是要代理生成的scheduler,getSchedulerName只有一句話(huà),如下:
cfg.getStringProperty(PROP_SCHED_INSTANCE_NAME,"QuartzScheduler");
//如果我們沒(méi)有使用一些特殊的機(jī)制,那么返回的只能是一個(gè)固定的字符串。
如上說(shuō)述,如果我們希望不進(jìn)行改造,就在spring的配置文件中定義多個(gè)調(diào)度的方法來(lái)實(shí)現(xiàn)我們個(gè)性化的任務(wù)安排時(shí),可能并不可行。因?yàn)?/span>spring配置的scheduler只能有一個(gè),即使你定義了多個(gè)調(diào)度,那么其實(shí)實(shí)現(xiàn)的只有一個(gè),只是所有你希望指向不同調(diào)度的id都會(huì)指向它罷了,而這個(gè)調(diào)度會(huì)包含了其它所有調(diào)度中的任務(wù)。
4、抱錯(cuò):org.quartz.SchedulerException: Repeat Interval cannot be zero
場(chǎng)景:該錯(cuò)誤通常是在引用了SimpleTriggerBean的時(shí)候沒(méi)有為repeatCount和repeatInterval賦值發(fā)生的,很奇怪,SimpleTriggerBean有一個(gè)空構(gòu)造函數(shù),在里面直接為repeatCount賦了一個(gè)REPEAT_INDEFINITELY,這樣,當(dāng)其進(jìn)入validate函數(shù)時(shí),會(huì)抱錯(cuò)。而quartz中的SimpleTrigger這兩個(gè)屬性默認(rèn)值均為0,不懂spring中為何這樣處理。
5、quartzcrontab的區(qū)別
a、quartz屬于用戶(hù)級(jí)別,crontab則屬于系統(tǒng)級(jí)別;
b、quartz調(diào)度的線(xiàn)程,所有線(xiàn)程共享一個(gè)jvm;crontab調(diào)度的則是應(yīng)用,每個(gè)應(yīng)用都獨(dú)立的占用資源。
6、quartz中加入并發(fā)多線(xiàn)程分析
a、quartz本身是有線(xiàn)程池支持的,這個(gè)可以用org.quartz.threadPool.threadCount屬性來(lái)設(shè)置線(xiàn)程池大小,quartz的任務(wù)可以由quartz的線(xiàn)程池自動(dòng)調(diào)度
b、對(duì)每個(gè)任務(wù)也可能起多線(xiàn)程,但是需要對(duì)并發(fā)數(shù)量做控制,可以考慮使用commons-pools提供的對(duì)象池機(jī)制

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    中国一区二区三区不卡| 成人精品亚洲欧美日韩| 高清一区二区三区大伊香蕉| 东京热男人的天堂社区| 精品国产亚洲区久久露脸| 国产成人亚洲欧美二区综| 男人大臿蕉香蕉大视频| 黄色污污在线免费观看| 美女黄片大全在线观看| 日韩av生活片一区二区三区| 国产在线不卡中文字幕| 国产成人亚洲综合色就色| 日本欧美一区二区三区高清| 又色又爽又黄的三级视频| 久久精品色妇熟妇丰满人妻91| 熟女中文字幕一区二区三区| 国产成人精品综合久久久看| 国产亚州欧美一区二区| 内射精品欧美一区二区三区久久久| 麻豆tv传媒在线观看| 亚洲综合日韩精品欧美综合区| 久久精品亚洲欧美日韩| 欧美乱视频一区二区三区| 亚洲国产精品一区二区| 美女极度色诱视频在线观看| 日本成人三级在线播放| 国产又粗又硬又长又爽的剧情| 国产视频一区二区三区四区| 国产精品亚洲综合色区韩国| 日本欧美在线一区二区三区| 日本不卡一区视频欧美| 日韩不卡一区二区三区色图| 亚洲第一视频少妇人妻系列| 精品一区二区三区中文字幕| 亚洲综合伊人五月天中文| 日韩中文字幕免费在线视频| 国产欧美一区二区久久| 久久少妇诱惑免费视频| 亚洲黄香蕉视频免费看| 国产免费成人激情视频| 精品日韩中文字幕视频在线|