quartz之servlet启动方式

本文详细介绍如何使用Quartz框架实现定时任务的配置与执行,包括配置属性文件、创建任务XML、设置触发器、整合日志框架及部署应用等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.复制org.quartz.quartz.properties或新建quartz_priority.properties到src目录下;

org.quartz.scheduler.instanceName = PushDBScheduler
org.quartz.scheduler.instanceId = one
orgorg.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadPriority = 4
orgorg.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml

 

2.新建quarzt_config.xml到src目录下;

 

<quartz>
	<job>
		<job-detail>
			<name>ScanItemsInDB</name>
			<group>Scanning</group>
			<job-class>com.testquartz.ScanDB</job-class>
			<job-data-map allows-transient-data="true">
				<entry>
					<key>testmode</key>
					<value>true</value>
				</entry>
			</job-data-map>
		</job-detail>
		<trigger>
			<cron>
				<name>t1</name>
				<group> Scanning </group>
				<job-name> ScanItemsInDB </job-name>
				<job-group> Scanning </job-group>
				<cron-expression>0 0/5 * * * ?</cron-expression>
			</cron>
		</trigger>
	</job>
</quartz>

 

3.新建log4j.xml文件到src目录下;

4.引入quartz的依赖包:

  • log4j-1.2.16.jar
  • quartz-2.1.7.jar
  • slf4j-api-1.6.1.jar
  • slf4j-log4j12-1.6.1.jar

5.新建Servlet:QuartzInit;

web.xml中配置:

 

<servlet>
   <servlet-name>QuartzInit</servlet-name>
   <servlet-class>com.xxx.util.QuartzInit</servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>

6.servlet代码:

 

import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.util.Date;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.examples.example1.HelloJob;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class QuartzInit extends HttpServlet {
	private static Logger log = LoggerFactory.getLogger(QuartzInit.class);

	@Override
	public void init(ServletConfig cfg) throws ServletException {
		super.init();
		initScheduler(cfg);
	}
	
	protected void initScheduler(ServletConfig cfg) {
		try {
			SchedulerFactory sf = new StdSchedulerFactory();
			Scheduler sched = sf.getScheduler();
			Date runTime = evenMinuteDate(new Date());
			JobDetail job = newJob(HelloJob.class).withIdentity("job1",
					"group1").build();
			Trigger trigger = newTrigger().withIdentity("trigger1", "group1")
					.startAt(runTime).build();
			sched.scheduleJob(job, trigger);
			sched.start();
			try {
				Thread.sleep(65L * 1000L);
			} catch (Exception e) {
			}
			log.info("------- Shutting Down ---------------------");
			sched.shutdown(true);
		} catch (Exception e) {
			log.error(e.getMessage());
		}
	}

}

 7.定义我们的job类:HelloJob

 

package org.quartz.examples.example1;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job {
	private static Logger _log = LoggerFactory.getLogger(HelloJob.class);

	public HelloJob() {
	}

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		_log.info("Hello World! - " + new Date());
	}

}

 

8.部署项目到服务器,启动服务器,后台就可以看到调度的执行情况。

Quartz是一个开源的调度框架,常用于定时任务的调度和执行。当我们将Quartz集成到Tomcat中,并希望在Tomcat启动时执行一次任务时,可以按照以下步骤进行配置。 首先,我们需要在Tomcat的web.xml文件中配置一个Servlet,用于接收Tomcat启动的事件通知。在该Servlet的初始化方法中,我们可以通过调用Quartz的Scheduler实例的start方法来启动Quartz的调度器,以便开始任务的调度。 然后,我们需要定义一个Quartz的Job类,该类实现了Quartz的Job接口。在Job类中,我们可以实现我们需要执行的任务逻辑。例如,如果我们希望在Tomcat启动时打印一条日志,则可以在Job类的execute方法中执行打印日志的逻辑。 接下来,我们需要在Quartz的配置文件(例如quartz.properties)中配置需要执行的Job。在配置文件中,我们可以指定调度任务的执行时间和频率。例如,我们可以使用Cron表达式来定义定时任务的执行时间,如每天的凌晨2点执行一次。 最后,我们将配置文件和Job类放置在项目的classpath目录下,并将其添加到Tomcat的类路径中。 当我们启动Tomcat时,Tomcat会初始化Servlet,并触发Servlet的初始化方法。在初始化方法中,我们会调用Quartz的Scheduler实例的start方法,从而启动Quartz的调度器。Quartz的调度器会按照配置文件中的设定,执行我们定义的任务逻辑,例如打印一条日志。 总结起来,通过在Tomcat中集成Quartz,并在Tomcat启动时执行一次任务,我们可以使用Tomcat的启动事件通知机制,在Quartz中定义和调度任务,并在任务启动时执行我们所需的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值