Java Tomcat7中使用Quartz2.2实现定时任务项目代码实例(demo)
在Java中使用Quartz 2.2结合Tomcat 7实现定时任务是一种常见的需求,Quartz是一个强大的定时任务库,能够帮助开发者轻松实现复杂的定时任务调度。以下是一个简单的示例,展示如何在Java Web应用中集成Quartz来执行定时任务。
详细文档:
1)添加Quartz依赖
首先,确保在你的pom.xml
文件中加入Quartz的依赖。这样Maven就能自动下载Quartz库。
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
2)创建定时任务
接下来,创建一个实现了org.quartz.Job
接口的类。在这个类中实现你的定时任务逻辑。
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello, Quartz! - executing its JOB at " + new java.util.Date());
}
}
3)初始化并启动调度器
在Web应用的启动时初始化并启动Quartz调度器。可以通过实现ServletContextListener
接口,在Web应用启动和关闭时分别启动和停止调度器。
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzListener implements ServletContextListener {
private Scheduler scheduler;
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
// 创建调度器
scheduler = StdSchedulerFactory.getDefaultScheduler();
// 定义一个触发器
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10) // 每10秒执行一次
.repeatForever())
.build();
// 定义一个任务
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
// 调度器关联任务和触发器,保证按触发器定义的条件执行任务
scheduler.scheduleJob(job, trigger);
// 启动调度器
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
try {
if (scheduler != null) {
scheduler.shutdown();
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
4)配置web.xml
最后,在web.xml
中注册你的ServletContextListener
。
<listener>
<listener-class>your.package.QuartzListener</listener-class>
</listener>
详细文档: