项目定时任务实现方式比较

定时任务在项目中使用非常普遍,比如说:每天晚上3:00开始执行数据真删除,每个月第四周星期三晚上1:00开始执行报表统计任务等,我们在项目中,可以通过下面三种方式来实现:
一、利用j2se的timer类来实现,非常简单,代码如下:
import java.util.Timer;
import java.util.TimerTask;

public class FuduTest {

public static void main(String[] args)...{
Timer timer = new Timer();
timer.schedule(new FuduTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒
}

static class FuduTask extends TimerTask{

@Override
public void run(){
System.out.println("开始执行定时任务......");
}
}
}
这种方式可以实现一些简单的定时任务,如果任务的启动条件复杂,就要借助于框架来实现了。
二、使用定时器框架,我在这仅介绍广泛使用的Quartz框架结合spring的使用。
<!---起动Bean,集成其它的触发-> 
<bean id="mainScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
<property name="triggers"> 
<list>          
<ref bean="cronReportTrigger"/> 
</list> 
</property> 
</bean>  
<!--实际的工作Bean--> 
<bean id="myService" class="com.spring.helloworld.CourseService"></bean> 
<!--jobBean用于设定启动时运用的Bean与方法--> 
<bean id="scheduledReportJobDetail"            class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
<property name="targetObject"> 
<ref  bean="myService"/>   
</property> 
<property name="targetMethod"> 
<value>sendMail2BrithdayCustomer</value> 
</property> 
</bean> 
<!--定时器设定起动表达式,比如下面的是:每5秒起动一次 (0 0  5 * * ?每日五点起动)--> 
<bean id="cronReportTrigger"  
class="org.springframework.scheduling.quartz.CronTriggerBean"> 
<property  name="jobDetail"><ref bean="scheduledReportJobDetail"/> 
</property> 
<property name="cronExpression"><value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>   
</property> 
</bean> 
在spring中的配置可谓是相当的简单,你要写的仅仅是一个业务类而已。使用在项目中集成框架的缺点是:和项目服务器的耦合度太高,项目服务器当机,定时任务也就over了,定时任务执行异常,也会影响到服务器的项目,因此,最好的办法,还是采用下面的第三种方式。
三、利用操作系统的定时任务
windows操作系统:在控制面板中的计划任务,按提示一步一步就可以完成,但是前提是你得写好一个批处理文件(.bat的),并确保该批处理可以运行。
该脚本中,一般是调用java的一个main方法,在main方法中,用代码的方式启动spring容器,得到业务对象引用,调用业务方法即可。
linux操作系统:
使用crontab,一般的linux系统中都有集成,你只需:vim /etc/crontab即可,根据该文件中的example,添加你的任务命令行。
下面是我的一行配置命令:
# m h dom mon dow user  command
30 5 * * * root /home/server/run/translate.sh >> /var/log/fudu365/auto_run/tranlate.log
加入你的任务行后,crontab会自动生效,不用你重启。
注意:crontab可,最前面一位不是秒哦,也就是,它只能在0秒开始运行。
无论你是用框架,还是crontab,有一个东西非常重要,那就是cronExpression,cronExpression怎么写,自己到网上查,http://en.wikipedia.org/wiki/CRON_expression 也有一篇,你可以去看看。
总之,项目中的定时任务,你得根据项目的实际情况进行选择,如果你想要一个稳定、强大的定时任务,还是采用第三种方式吧。

本文首发http://www.fudu365.com【英语听力复读网】,转载请保留。

猜你喜欢

转载自ljh2008.iteye.com/blog/832605