- 浏览: 96695 次
- 性别:
- 来自: 临沂
文章分类
- 全部博客 (125)
- spring (2)
- java (6)
- jquery (0)
- android (0)
- window (1)
- 数据库 (0)
- 项目管理 (1)
- maven (0)
- english (0)
- ext (0)
- javascript and html (2)
- hibernate (1)
- p6spy (0)
- shiro (0)
- fusionchart (0)
- FileUtils (0)
- struts2 (0)
- ireport (0)
- webservice (0)
- stripes (0)
- jsp (1)
- it综合 (1)
- linux (1)
- 工作流 (0)
- activiti (0)
- poi (0)
- nosql (0)
- mongodb (0)
- lucene (0)
- nodejs (10)
- eclipse (2)
- objective-c (1)
最新评论
Spring定时器的两种实现方式一(timer)
有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。
1.Java Timer定时
相信做软件的朋友都有这样的经历,我的软件是不是少了点什么东西呢?比如定时任务啊,
就拿新闻发布系统来说,如果新闻的数据更新太快,势必涉及一个问题,这些新闻不能由人工的去发布,应该让系统自己发布,这就需要用到定时定制任务了,以前定制任务无非就是设计一个Thread,并且设置运行时间片,让它到了那个时间执行一次,就ok了,让系统启动的时候启动它,想来也够简单的。不过有了spring,我想这事情就更简单了。
看看spring的配置文件,想来就只有这个配置文件了
xml 代码
- <beanid="infoCenterAutoBuildTask"
- class="com.teesoo.teanet.scheduling.InfoCenterAutoBuildTask">
- <propertyname="baseService"ref="baseService"/>
- <propertyname="htmlCreator"ref="htmlCreator"/>
- </bean>
- <beanid="scheduledTask"
- class="org.springframework.scheduling.timer.ScheduledTimerTask">
- <!--wait10secondsbeforestartingrepeatedexecution-->
- <propertyname="delay"value="10000"/>
- <!--runevery50seconds-->
- <propertyname="period"value="1000000"/>
- <propertyname="timerTask"ref="infoCenterAutoBuildTask"/>
- </bean>
- <beanid="timerFactory"class="org.springframework.scheduling.timer.TimerFactoryBean">
- <propertyname="scheduledTimerTasks">
- <list>
- <!--seetheexampleabove-->
- <refbean="scheduledTask"/>
- </list>
- </property>
- </bean>
上面三个配置文件中只有一个配置文件是涉及到您自己的class的,其他的都是spring的类。很简单吧
我们只需要涉及一个class让他继承java.util.TimerTask;
java 代码
- BaseTaskextendsjava.util.TimerTask{
- //用户只需要实现这个方面,把自己的任务放到这里
- publicvoidrun(){
- }
- }
下面让我们来看看 spring的源代码
java 代码
- /*
- *Copyright2002-2005theoriginalauthororauthors.
- *
- *LicensedundertheApacheLicense,Version2.0(the"License");
- *youmaynotusethisfileexceptincompliancewiththeLicense.
- *YoumayobtainacopyoftheLicenseat
- *
- *http://www.apache.org/licenses/LICENSE-2.0
- *
- *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
- *distributedundertheLicenseisdistributedonan"ASIS"BASIS,
- *WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
- *SeetheLicenseforthespecificlanguagegoverningpermissionsand
- *limitationsundertheLicense.
- */
- packageorg.springframework.scheduling.timer;
- importjava.util.TimerTask;
- /**
- *JavaBeanthatdescribesascheduledTimerTask,consistingof
- *theTimerTaskitself(oraRunnabletocreateaTimerTaskfor)
- *andadelayplusperiod.Periodneedstobespecified;
- *thereisnopointinadefaultforit.
- *
- *<p>TheJDKTimerdoesnotoffermoresophisticatedscheduling
- *optionssuchascronexpressions.ConsiderusingQuartzfor
- *suchadvancedneeds.
- *
- *<p>NotethatTimerusesaTimerTaskinstancethatisshared
- *betweenrepeatedexecutions,incontrasttoQuartzwhich
- *instantiatesanewJobforeachexecution.
- *
- *@authorJuergenHoeller
- *@since19.02.2004
- *@seejava.util.TimerTask
- *@seejava.util.Timer#schedule(TimerTask,long,long)
- *@seejava.util.Timer#scheduleAtFixedRate(TimerTask,long,long)
- */
- publicclassScheduledTimerTask{
- privateTimerTasktimerTask;
- privatelongdelay=0;
- privatelongperiod=0;
- privatebooleanfixedRate=false;
- /**
- *CreateanewScheduledTimerTask,
- *tobepopulatedviabeanproperties.
- *@see#setTimerTask
- *@see#setDelay
- *@see#setPeriod
- *@see#setFixedRate
- */
- publicScheduledTimerTask(){
- }
- /**
- *CreateanewScheduledTimerTask,withdefault
- *one-timeexecutionwithoutdelay.
- *@paramtimerTasktheTimerTasktoschedule
- */
- publicScheduledTimerTask(TimerTasktimerTask){
- this.timerTask=timerTask;
- }
- /**
- *CreateanewScheduledTimerTask,withdefault
- *one-timeexecutionwiththegivendelay.
- *@paramtimerTasktheTimerTasktoschedule
- *@paramdelaythedelaybeforestartingthetaskforthefirsttime(ms)
- */
- publicScheduledTimerTask(TimerTasktimerTask,longdelay){
- this.timerTask=timerTask;
- this.delay=delay;
- }
- /**
- *CreateanewScheduledTimerTask.
- *@paramtimerTasktheTimerTasktoschedule
- *@paramdelaythedelaybeforestartingthetaskforthefirsttime(ms)
- *@paramperiodtheperiodbetweenrepeatedtaskexecutions(ms)
- *@paramfixedRatewhethertoscheduleasfixed-rateexecution
- */
- publicScheduledTimerTask(TimerTasktimerTask,longdelay,longperiod,booleanfixedRate){
- this.timerTask=timerTask;
- this.delay=delay;
- this.period=period;
- this.fixedRate=fixedRate;
- }
- /**
- *CreateanewScheduledTimerTask,withdefault
- *one-timeexecutionwithoutdelay.
- *@paramtimerTasktheRunnabletoscheduleasTimerTask
- */
- publicScheduledTimerTask(RunnabletimerTask){
- setRunnable(timerTask);
- }
- /**
- *CreateanewScheduledTimerTask,withdefault
- *one-timeexecutionwiththegivendelay.
- *@paramtimerTasktheRunnabletoscheduleasTimerTask
- *@paramdelaythedelaybeforestartingthetaskforthefirsttime(ms)
- */
- publicScheduledTimerTask(RunnabletimerTask,longdelay){
- setRunnable(timerTask);
- this.delay=delay;
- }
- /**
- *CreateanewScheduledTimerTask.
- *@paramtimerTasktheRunnabletoscheduleasTimerTask
- *@paramdelaythedelaybeforestartingthetaskforthefirsttime(ms)
- *@paramperiodtheperiodbetweenrepeatedtaskexecutions(ms)
- *@paramfixedRatewhethertoscheduleasfixed-rateexecution
- */
- publicScheduledTimerTask(RunnabletimerTask,longdelay,longperiod,booleanfixedRate){
- setRunnable(timerTask);
- this.delay=delay;
- this.period=period;
- this.fixedRate=fixedRate;
- }
- /**
- *SettheRunnabletoscheduleasTimerTask.
- *@seeDelegatingTimerTask
- */
- publicvoidsetRunnable(RunnabletimerTask){
- this.timerTask=newDelegatingTimerTask(timerTask);
- }
- /**
- *SettheTimerTasktoschedule.
- */
- publicvoidsetTimerTask(TimerTasktimerTask){
- this.timerTask=timerTask;
- }
- /**
- *ReturntheTimerTasktoschedule.
- */
- publicTimerTaskgetTimerTask(){
- returntimerTask;
- }
- /**
- *Setthedelaybeforestartingthetaskforthefirsttime,
- *inmilliseconds.Defaultis0,immediatelystartingthe
- *taskaftersuccessfulscheduling.
- */
- publicvoidsetDelay(longdelay){
- this.delay=delay;
- }
- /**
- *Returnthedelaybeforestartingthejobforthefirsttime.
- */
- publiclonggetDelay(){
- returndelay;
- }
- /**
- *Settheperiodbetweenrepeatedtaskexecutions,inmilliseconds.
- *Defaultis0,leadingtoone-timeexecution.Incaseofapositive
- *value,thetaskwillbeexecutedrepeatedly,withthegiveninterval
- *inbetweenexecutions.
- *<p>Notethatthesemanticsoftheperiodvarybetweenfixed-rate
- *andfixed-delayexecution.
- *@see#setFixedRate
- */
- publicvoidsetPeriod(longperiod){
- this.period=period;
- }
- /**
- *Returntheperiodbetweenrepeatedtaskexecutions.
- */
- publiclonggetPeriod(){
- returnperiod;
- }
- /**
- *Setwhethertoscheduleasfixed-rateexecution,ratherthan
- *fixed-delayexecution.Defaultis"false",i.e.fixeddelay.
- *<p>SeeTimerjavadocfordetailsonthoseexecutionmodes.
- *@seejava.util.Timer#schedule(TimerTask,long,long)
- *@seejava.util.Timer#scheduleAtFixedRate(TimerTask,long,long)
- */
- publicvoidsetFixedRate(booleanfixedRate){
- this.fixedRate=fixedRate;
- }
- /**
- *Returnwhethertoscheduleasfixed-rateexecution.
- */
- publicbooleanisFixedRate(){
- returnfixedRate;
- }
- }
说实话这个类也没什么,只是简单的包装了我们的timertask,里面也就只有几个属性,一个是时间片,一个是任务等。
真正运行我们的任务的类是:
java 代码
- /*
- *Copyright2002-2006theoriginalauthororauthors.
- *
- *LicensedundertheApacheLicense,Version2.0(the"License");
- *youmaynotusethisfileexceptincompliancewiththeLicense.
- *YoumayobtainacopyoftheLicenseat
- *
- *http://www.apache.org/licenses/LICENSE-2.0
- *
- *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
- *distributedundertheLicenseisdistributedonan"ASIS"BASIS,
- *WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
- *SeetheLicenseforthespecificlanguagegoverningpermissionsand
- *limitationsundertheLicense.
- */
- packageorg.springframework.scheduling.timer;
- importjava.util.Timer;
- importorg.apache.commons.logging.Log;
- importorg.apache.commons.logging.LogFactory;
- importorg.springframework.beans.factory.DisposableBean;
- importorg.springframework.beans.factory.FactoryBean;
- importorg.springframework.beans.factory.InitializingBean;
- /**
- *FactoryBeanthatsetsupaJDK1.3+Timerandexposesitforbeanreferences.
- *
- *<p>AllowsforregistrationofScheduledTimerTasks,automaticallystarting
- *theTimeroninitializationandcancellingitondestructionofthecontext.
- *Inscenariosthatjustrequirestaticregistrationoftasksatstartup,
- *thereisnoneedtoaccesstheTimerinstanceitselfinapplicationcode.
- *
- *<p>NotethatTimerusesaTimerTaskinstancethatissharedbetween
- *repeatedexecutions,incontrasttoQuartzwhichinstantiatesanew
- *Jobforeachexecution.
- *
- *@authorJuergenHoeller
- *@since19.02.2004
- *@seeScheduledTimerTask
- *@seejava.util.Timer
- *@seejava.util.TimerTask
- */
- publicclassTimerFactoryBeanimplementsFactoryBean,InitializingBean,DisposableBean{
- protectedfinalLoglogger=LogFactory.getLog(getClass());
- privateScheduledTimerTask[]scheduledTimerTasks;
- privatebooleandaemon=false;
- privateTimertimer;
- /**
- *RegisteralistofScheduledTimerTaskobjectswiththeTimerthat
- *thisFactoryBeancreates.DependingoneachSchedulerTimerTask's
- *settings,itwillberegisteredviaoneofTimer'sschedulemethods.
- *@seejava.util.Timer#schedule(java.util.TimerTask,long)
- *@seejava.util.Timer#schedule(java.util.TimerTask,long,long)
- *@seejava.util.Timer#scheduleAtFixedRate(java.util.TimerTask,long,long)
- */
- publicvoidsetScheduledTimerTasks(ScheduledTimerTask[]scheduledTimerTasks){
- this.scheduledTimerTasks=scheduledTimerTasks;
- }
- /**
- *Setwhetherthetimershoulduseadaemonthread,
- *justexecutingaslongastheapplicationitselfisrunning.
- *<p>Defaultis"false":Thetimerwillautomaticallygetcancelledon
- *destructionofthisFactoryBean.Hence,iftheapplicationshutsdown,
- *taskswillbydefaultfinishtheirexecution.Specify"true"foreager
- *shutdownofthreadsthatexecutetasks.
- *@seejava.util.Timer#Timer(boolean)
- */
- publicvoidsetDaemon(booleandaemon){
- this.daemon=daemon;
- }
- publicvoidafterPropertiesSet(){
- logger.info("InitializingTimer");
- this.timer=createTimer(this.daemon);
- //RegisterallScheduledTimerTasks.
- if(this.scheduledTimerTasks!=null){
- for(inti=0;i<this.scheduledTimerTasks.length;i++){
- ScheduledTimerTaskscheduledTask=this.scheduledTimerTasks[i];
- if(scheduledTask.getPeriod()>0){
- //repeatedtaskexecution
- if(scheduledTask.isFixedRate()){
- this.timer.scheduleAtFixedRate(
- scheduledTask.getTimerTask(),scheduledTask.getDelay(),scheduledTask.getPeriod());
- }
- else{
- this.timer.schedule(
- scheduledTask.getTimerTask(),scheduledTask.getDelay(),scheduledTask.getPeriod());
- }
- }
- else{
- //One-timetaskexecution.
- this.timer.schedule(scheduledTask.getTimerTask(),scheduledTask.getDelay());
- }
- }
- }
- }
- /**
- *CreateanewTimerinstance.Calledby<code>afterPropertiesSet</code>.
- *CanbeoverriddeninsubclassestoprovidecustomTimersubclasses.
- *@paramdaemonwhethertocreateaTimerthatrunsasdaemonthread
- *@returnanewTimerinstance
- *@see#afterPropertiesSet()
- *@seejava.util.Timer#Timer(boolean)
- */
- protectedTimercreateTimer(booleandaemon){
- returnnewTimer(daemon);
- }
- publicObjectgetObject(){
- returnthis.timer;
- }
- publicClassgetObjectType(){
- returnTimer.class;
- }
- publicbooleanisSingleton(){
- returntrue;
- }
- /**
- *CanceltheTimeronbeanfactoryshutdown,stoppingallscheduledtasks.
- *@seejava.util.Timer#cancel()
- */
- publicvoiddestroy(){
- logger.info("CancellingTimer");
- this.timer.cancel();
- }
- }
这个类就是运行我们任务的类了,我们可以定制N个任务,只需要塞到这里就ok了
相关推荐
Spring 定时器两种实现方式 Spring 定时器是 Spring 框架中的一种组件,用于实现定时任务的执行。它提供了两种实现方式:Java Timer 定时和 Quartz 定时器。在本文中,我们将详细介绍这两种实现方式的原理、优点和...
Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...
Spring两种定时器实例配置:Java的TimerTask类和OpenSymphony的Quartz。包含5种配置方式:timer普通定时器、timer特定方法定时器、quartz简单定时器、quartz精确定时器、quartz特定方法定时器。简单实用,一看就会。
在Spring框架中,定时任务的实现通常有多种方式,这里主要讨论的是两种常见的方式:Java Timer和Quartz定时器。这两种方法都有其特点和适用场景,开发者可以根据项目需求来选择。 1. **Java Timer定时器** Java ...
首先,Java定时器(java.util.Timer)是Java标准库提供的一种基础定时服务。它允许开发者安排一次性或重复的任务,这些任务将以单独的线程运行,不影响主线程的工作。创建定时器时,通常会使用`new Timer()`构造函数...
在Java的Spring框架中,定时任务的实现有多种方式,其中两种常见的实现是基于Java的`Timer`类和OpenSymphony的`Quartz`库。这两种定时器在Spring中的使用和配置有所不同,各有优缺点,适合不同的应用场景。 1. **...
在Spring框架中,实现定时任务有两种主流方式:使用`java.util.Timer`类或集成第三方库如Quartz。这两种方法各有优势: - **Java Timer**:简单易用,适合简单的定时任务需求。 - **Quartz**:功能强大且灵活,支持...
Spring定时器基于Java的`java.util.Timer`和`java.util.TimerTask`,但更进一步,它支持Quartz和SimpleScheduler这两种强大的定时任务库。Quartz是一个开源的作业调度框架,而SimpleScheduler则内置在Spring中,适用...
在提供的压缩包文件中,可能包含了使用上述两种方式实现的项目实例代码,你可以通过这些实例学习如何在不同的Spring版本下配置和使用定时任务。对于初学者来说,理解这些实例有助于深入掌握Spring的定时任务管理,并...
Spring提供了两种主要的调度组件:`org.springframework.scheduling.timer.TimerTaskExecutor`(基于Java的`java.util.Timer`)和`org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor`(基于线程池...
在Java中实现定时任务有多种方式,...总之,Java中实现定时任务的三种主要方式各有特点,从简单的Timer到功能强大的Quartz再到易用的Spring Task,开发者可以根据自己的具体需求和场景,选择合适的定时任务实现方式。
这两种方法都可以有效地在Spring Boot中实现定时任务的功能。第一种方法更为常见,因为它允许你在主类中直接启用定时任务功能;而第二种方法则可以让主类保持简洁,适合那些希望将定时任务与业务逻辑分离的场景。...
Spring框架和Java内置的定时器提供了两种不同的方式来实现这样的功能。 首先,我们来看Spring定时器。Spring使用的是Quartz库来实现定时任务管理。在给出的例子中,可以看到配置文件中定义了几个关键的bean: 1. `...
Spring定时器主要通过`java.util.Timer`和`java.util.concurrent.ScheduledExecutorService`两种方式来实现。但在Spring中更常用的是基于`@Scheduled`注解的方式,这种方式更加简洁且易于集成。 #### 三、Spring...
本篇文章将详细解读如何在Spring中实现定时任务,包括两种不同的实现方式:基于Timer的任务调度和基于Quartz的作业调度。 首先,我们来看基于Timer的定时任务实现。在Spring中,可以通过`ScheduledTimerTask`和`...
Spring中实现定时任务通常有两种方式:一是使用@Scheduled注解,二是使用Spring Task的TaskScheduler接口。在这个例子中,ScheduledTimer类可能被Spring容器管理,并通过@Scheduled注解或配置文件来设置定时任务的...
`Timer` 类提供了两种计划任务的方法:`schedule(TimerTask task, long delay)` 和 `scheduleAtFixedRate(TimerTask task, long delay, long period)`。前者会在指定的延迟后执行一次任务,而后者则会按照固定的延迟...
Java的`java.util.Timer`类用于调度线程在特定时间执行任务,它提供了两种任务执行方式:`schedule()`和`scheduleAtFixedRate()`。前者用于定期执行任务,但每次执行之间的时间间隔可能因任务执行时间而有所不同;后...
本文档将详细介绍这两种定时器的配置过程及其在 Spring 中的应用。 #### 二、Java Timer 在 Spring 中的应用 ##### 2.1 简单定时器的定义 Spring 支持通过 `java.util.Timer` 类来实现简单的定时任务。这种定时器...
总结,Spring的定时任务设置在不同版本中有不同的实现方式,2.x版本依赖于`Timer`,而3.x版本引入了更为灵活的`@Scheduled`注解和`Quartz`支持,使得定时任务的配置和管理更加简便。在实际项目中,可以根据需求选择...