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.部署项目到服务器,启动服务器,后台就可以看到调度的执行情况。
相关推荐
3. **初始化Scheduler**:在Servlet容器启动时,通过ServletContextListener或ServletContextAttributeListener初始化Quartz的Scheduler。在`contextInitialized`方法中,加载配置、创建Scheduler并注册Job和Trigger...
在Servlet环境下,特别是在使用Spring MVC等框架时,Quartz与ServletContext的结合配置显得尤为重要,因为这能让我们更好地管理和监控后台定时任务。 ### Quartz简介 Quartz 提供了一个完全线程化的事件调度器,...
这个简单的示例展示了Quartz的基本用法,但实际使用中,Quartz的强大之处在于其复杂的Trigger组合、可持久化的Job存储以及灵活的任务调度策略。你可以创建多个Job和Trigger,甚至可以设置依赖关系,使得某些Job只有...
2. 初始化调度器,创建Scheduler实例并启动。 四、创建作业和触发器 1. 创建自定义作业类:扩展`org.quartz.Job`接口,并实现`execute(JobExecutionContext context)`方法。 2. 定义触发器:根据需求选择合适的...
1. **Job(作业)**:这是Quartz中的核心概念之一,它代表了要执行的任务。一个`Job`实例必须实现`org.quartz.Job`接口,并且重写`execute`方法来定义具体的任务逻辑。如果任务需要保存状态,则需要实现`StatefulJob...
- **Web加载Quartz任务**:在Web环境中,如Servlet容器(如Tomcat)中,Quartz任务通常作为监听器启动,或者在初始化Servlet时进行配置。这可以通过在web.xml中配置一个实现了`javax.servlet.ServletContextListener...
在Quartz Web中,用户可以通过以下方式操作定时任务: 1. **任务创建**:创建新的Job和Trigger,指定执行的类、参数、触发条件等。 2. **任务编辑**:修改已有的Job和Trigger的配置,如更改执行频率、添加新的数据...
通过深入理解Quartz的工作原理和配置方式,我们可以创建出满足业务需求的精确定时任务。 总之,本示例展示了如何利用Quartz框架在Web环境中创建一个简单的定时任务,它每分钟的6秒倍数执行一次,输出"helloWorld"。...
5. **启动调度器**:启动调度器以开始任务调度。 ```java scheduler.start(); ``` 6. **关闭调度器**:在应用结束时关闭调度器以释放资源。 ```java scheduler.shutdown(); ``` #### 五、Quartz的触发器类型...
- 确保Web服务器(如Tomcat)支持Servlet 3.0或更高版本,因为Quartz通常通过Servlet容器来启动和管理。 2. **配置Quartz** - 创建一个配置类,例如`QuartzConfig.java`,用于配置Scheduler实例。在这里,你可以...
Quartz 设计为高可用性和容错性,当Job执行失败时,可以通过重试策略、错误处理Job或邮件通知等方式进行错误处理。另外,Quartz 还支持Job执行的持久化,即使服务器重启,也能恢复未完成的Job。 八、最佳实践 1. 尽...
这个配置将 Quartz 的初始化Servlet设置为 load-on-startup 模式,以便在应用程序启动时自动初始化 Quartz。 quartz.properties 配置 在 resource 目录下,创建一个 quartz.properties 文件,用于配置 Quartz 的...
在Servlet容器启动时,你可以通过`Scheduler`实例将Job和Trigger绑定,完成任务的调度。首先,通过`SchedulerFactory`获取`Scheduler`实例,然后使用`scheduleJob()`方法添加Job和Trigger: ```java Scheduler ...
2. **配置Web应用启动器**:在`web.xml`中配置Quartz初始化Servlet,这样当Web应用启动时,Quartz也能随之初始化。具体配置如下: ```xml <servlet> <servlet-name>QuartzInitializer</servlet-name> ...
在Servlet的初始化方法或Web应用的启动时进行初始化: ```java SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); ...
- **Servlet 定义**:定义一个用于初始化 Quartz 的 Servlet 类。 - **初始化参数**:指定 Quartz 的配置文件位置等。 - **加载顺序**:设置 `load-on-startup` 属性来确保在应用启动时自动加载并初始化 Quartz。 `...
4. **调度 Job**:在 Servlet 初始化或 WebAPP 启动时,通过 Scheduler 创建 JobDetail 和 Trigger,并将它们关联起来,然后 schedule 进行调度。 5. **监听器**:可选地,可以注册 JobListener 和 TriggerListener ...
6. **Web应用整合**:在Servlet容器(如Tomcat)中运行Quartz,需要确保初始化和关闭Scheduler与Web应用生命周期同步。可以使用`ServletContextListener`监听器在Web应用启动时启动Scheduler,在停止时停止。 ```...
通过这个实例,开发者可以学习到如何在实际项目中集成Spring和Quartz,理解它们各自的职责和交互方式,以及如何利用Maven来管理项目依赖和构建流程。这对于构建高效、灵活的定时任务系统具有重要的实践意义。
3. **启动调度服务**:最后是启动 Quartz 调度服务,通常会在应用启动时通过一个 Servlet 来初始化调度器并启动任务。 #### 三、Spring + Quartz 动态任务方案详解 根据提供的代码片段,可以看出这是一个基于 ...