定时任务在项目中使用非常普遍,比如说:每天晚上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【英语听力复读网】,转载请保留。
分享到:
相关推荐
在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...
Java定时任务的实现是软件开发中常见的需求,用于在特定时间执行特定的业务逻辑,例如数据备份、报表生成等。本文将详细介绍两种常用的...在实际项目中,往往根据项目规模和需求复杂性来决定采用哪种定时任务实现方式。
Odoo是一个开源的ERP...总的来说,Odoo中的定时任务实现了代码的灵活编写和任务的自动化执行,为企业的信息化管理提供了强大的支持。本文通过讲解具体实现方式,希望对读者在使用Odoo进行开发和管理时能够有所帮助。
在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现简单的定时任务,但这种实现方式存在线程安全问题。在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述...
Spring框架提供了多种方式来实现定时任务,这使得开发者可以在不同场景下选择最适合的方案。本文主要探讨了Spring中实现定时任务的三种主要方法:Java的`java.util.Timer`、Quartz库以及Spring自身的Task调度器。 ...
在IT领域,定时任务是一种非常常见且重要的技术,它允许程序按照预设的时间间隔或特定时间执行特定的任务。...在实际开发中,应根据项目规模、性能需求和团队熟悉的技术栈来决定最适合的定时任务实现方式。
通过阅读和理解这些源码,你可以更好地了解Spring如何管理和调度定时任务,以及如何根据项目需求选择合适的定时任务实现方式。在chapter13目录下的文件可能包含了这些源码示例,你可以逐一研究,加深对Spring定时...
本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 首先,Quartz是一个开源的作业调度框架,它允许开发者创建、安排和执行定时...
本文将深入探讨如何使用C#语言来实现一个自定义的定时任务系统,支持多任务运行,以便更好地满足开发中的各种场景。 首先,我们需要理解C#中的基础定时器类`System.Timers.Timer`和`System.Threading.Timer`。这两...
在Spring框架中,定时任务是实现应用程序自动化执行特定任务的关键特性。这个例子将带你了解如何在Spring中设置和使用简单的定时任务。首先,我们需要引入Spring的Task模块,它提供了对定时任务的支持。 1. **引入...
在Spring框架中,有三种主要的定时任务机制可供开发者选择,分别是基于Quartz的定时机制、Spring自己的`@Scheduled`注解以及...在实际开发中,可以根据项目规模、性能需求和团队熟悉度来决定最适合的定时任务实现方式。
在Spring MVC框架中,定时任务是一项非常重要的...通过以上步骤,你可以在Spring MVC项目中轻松实现定时任务。这个实例代码提供了一个良好的起点,你可以在此基础上添加自己的业务逻辑,实现复杂且灵活的定时任务管理。
通过以上步骤,我们便能在IntelliJ IDEA中成功创建一个Spring Boot项目,并实现定时任务的测试。这种集成方式不仅提高了开发效率,也使得项目管理和调试变得更加便捷。在实际开发中,还可以结合其他Spring Boot特性...
在Web开发中,有时我们需要执行一些周期性的任务,如数据清理、统计分析或者发送通知等。Spring框架提供了强大的定时任务支持,使得在Web项目中实现这类...在实际项目中,务必根据业务需求选择合适的定时任务实现方式。
要实现"spring+quartz整合,动态管理定时任务",首先需要在项目中引入Spring和Quartz的相关依赖。在Maven或Gradle的pom.xml或build.gradle文件中添加对应库的依赖。然后,我们需要配置Spring的ApplicationContext,...
总结,ThinkPHP实现定时任务提供了多种途径,可以根据项目需求和资源状况灵活选择。无论选择哪种方式,都需要确保任务的可靠性和稳定性,同时注意代码的可维护性和性能优化。在实际操作中,还应关注日志记录和异常...
总结来说,Spring Boot提供了方便的方式来实现定时任务,通过`@Scheduled`注解和配置类,我们可以轻松地定义和管理周期性的任务。在hello-springboot项目中,你可以尝试按照上述步骤创建并运行一个简单的定时任务,...
在这个例子中,项目可能包含了一些学习示例,如`Job`目录下的类,这些类可能代表了具体的定时任务实现,每个类通常会继承自`IFurionJob`接口,这个接口定义了任务的执行逻辑。 `appsettings.json` 和 `appsettings....
3. **API设计**:为了实现前端对定时任务的控制,需要设计一套RESTful API接口,如POST /tasks/new 创建任务,DELETE /tasks/{id} 删除任务,PUT /tasks/{id}/update 更新任务,PUT /tasks/{id}/start 启动任务,PUT...
ssm整合quartz 并持久化到数据库中,实现动态增删改查,暂停任务,恢复任务等 将链接内的target文件直接放到项目ssmquartztest文件夹下 运行环境: jdk5+tomcat7+mysql+eclipse+maven lib jar包下载地址 地址1:...