在web环境下,Quartz可以通过配置文件来完成后台的作业调度,不必手工创建Trigger和Scheduler,其步骤如下:
首先将quartz.jar,以及lib目录下面core和optional两个目录中的所有jar全都放入项目WEB-INF\lib目录下
job就是一个简单的java类,这里的功能就是输出当前的时间了。
- import java.util.Date;
-
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
-
- public class Helloworld implements Job{
- public Helloworld() {
- }
-
- private static Log _log = LogFactory
- .getLog(Helloworld.class);
-
- public void execute(JobExecutionContext context)
- throws JobExecutionException {
- _log.info("Hello World! - " + new Date());
- }
- }
然后编写quartz.properties文件,这个文件的默认名称就是quartz.properties,如果启动项目的时候,Quartz没有在工程中找到该文件,就会从自己的jar包下面读取其默认的properties文件,其内容如下:
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true
上面的
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
是用来配置定义job文件的名称。
然后编写quartz_job.xml,
<quartz><job>
<trigger>
</trigger>
</job>
- <?xml version="1.0" encoding="UTF-8"?>
- <quartz>
- <job>
- <job-detail>
- <name>helloworld</name>
- <group>group1</group>
- <job-class>Helloworld</job-class>
- </job-detail>
- <trigger>
- <cron>
- <name>test</name>
- <group>group1</group>
- <job-name>helloworld</job-name>
- <job-group>group1</job-group>
- <cron-expression>0 0/1 * * * ?</cron-expression>
- </cron>
- </trigger>
- </job>
- </quartz>
</quartz>
可以看到,在配置文件中把jobdetail和trigger都作了完整的定义,并组合成一个job。下面,我们把上面两个文件都放入/WEB-INF/classes目录下,然后按照api中的说明修改一下web.xml。
- <servlet>
- <servlet-name>
- QuartzInitializer
- </servlet-name>
- <display-name>
- Quartz Initializer Servlet
- </display-name>
- <servlet-class>
- org.quartz.ee.servlet.QuartzInitializerServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- <init-param>
- <param-name>config-file</param-name>
- <param-value>/quartz.properties</param-value>
- </init-param>
- <init-param>
- <param-name>shutdown-on-unload</param-name>
- <param-value>true</param-value>
- </init-param>
- </servlet>
这样,在启动Tomcat的时候,QuartzInitializerServlet这个Servlet就会自动读取quartz.properties这个配置文件,并初始化调度信息,启动Scheduler。
我在这里用的是Quartz1.5.0,在1.5.1中新增加了QuartzInitializerListener,但是似乎有些问题,始终启动不起来,而且更过分的是,它的api居然写错了,在
<listener-class>这个标记中,用了 QuartzInitializerServletListener,就算把机器砸了,它也找不到这个类啊!</listener-class>
现在就大功告成了
一个Job类,一个quartz.properties文件,一个quertz_job.xml文件,还有修改一下web.xml文件,很简单呀!
不过看起来简单,解决的过程却很郁闷,单单是考虑如何在后台进程中运行Servlet就花了好长时间,后来查资料以后才知道可以用Listener或者是启动时运行的Servlet来完成,看来自己的底子还是不扎实的.
另外就是在Tomcat出现问题的时候,居然忘了到logs下面去看日志,这个疏忽是不可原谅的!以后要牢牢记住!
分享到:
相关推荐
BudWk(原名 NutzWk) 是有多年历史的Java Web开源开发框架,其6.x 是Java 微服务分布式 + 前后端完全分离版本,采用nutzboot(nutz核心)、dubbo、redis、zookeeper、shiro、quartz、beetl、logback、sentinel(流控框架...
在IT行业中,SSH(Spring、Struts、Hibernate)框架是一个常用的Java Web开发组合,它极大地简化了企业级应用的开发工作。本篇文章将基于提供的压缩包文件,详细讲解如何简易搭建SSH框架,并介绍相关的库文件及其...
SSM框架是由Spring、Spring MVC和MyBatis三个开源项目组合而成的一个强大的Java Web开发框架。这个框架的主要目的是简化企业级应用的开发流程,提高开发效率。SSM框架的简易搭建是一个适合初学者入门的过程,涉及到...
在Java Web开发中,Tomcat是一个广泛使用的开源应用服务器,主要负责运行Servlet和JSP应用程序。本篇文章将探讨如何在Tomcat中实现一个简单的定时器,以自动化执行特定任务。这个定时器的实现通常涉及使用Java的...
Spring Boot以其“约定优于配置”的理念,极大地简化了Java Web应用的开发流程,使得开发者能够快速地搭建应用程序。以下是系统的主要功能模块及其相关知识点: 1. **会员模块** 会员模块主要负责管理超市的会员...
【标题】:“一个基于SpringBoot的简易问卷调查系统”指的是使用SpringBoot框架开发的一个简单易用的在线问卷调查应用程序。SpringBoot是Java生态系统中的一个流行框架,它简化了创建独立的、生产级别的基于Spring的...
* WEB:<del>Tomcat8</del> (采用springboot框架开发时,并没有用到额外的tomcat 用的框架自带的) # 运行环境 * WEB服务器:`Weblogic`、`Tomcat`、`WebSphere`、`JBoss`、`Jetty` 等 * 数据库服务器:`Mysql...
首先,使用Java作为开发语言是因为Java具有跨平台性,能够在多种操作系统上运行,包括Linux,这使得该系统可以在不同的服务器环境中工作。Java的标准库提供了丰富的网络通信和文件操作API,非常适合构建这种远程管理...
【简单留言板】是一个适合初学者入门的Web开发项目,它主要使用了JSP(JavaServer Pages)技术来构建一个基础的在线留言板系统。这个项目涵盖了Web应用开发中的基础概念和常用技术,通过此项目,学习者可以理解如何...
总结来说,这个项目提供了一个使用 Spring Boot、Mybatis 和 Thymeleaf 构建的简易 Web 应用实例,涵盖了用户认证和数据管理的基础功能。开发者可以通过这个例子学习如何整合这三个框架,以及如何构建一个基于它们的...
</p><p>BudWk(原名 NutzWk) 是有多年历史的Java Web开源开发框架,其6.x 是Java 微服务分布式 + 前后端完全分离版本,采用nutzboot(nutz核心)、dubbo、redis、zookeeper、shiro、quartz、beetl、logback、sentinel...
这使得YACron4J在性能上表现优异,能够在高并发环境下稳定运行。 针对DST冲突,YACron4J做了专门的处理。DST(Daylight Saving Time)是指某些地区在夏季会调整时间,以节约日间照明用电。这种时间调整可能导致原本...
她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简简易上手,错误概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 性别男,若依是给女儿...
11.QuartzPlugin使用quartz执行定时任务,参照部分网络实例,简易实现 QuartzFactory.me().startJobOnce(TimeUtils.me().toString(DateTime.now()), jobId, "stati", this.getClass().getSimpleName(), ...
她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简简易上手,错误概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。性别男,若依是给女儿...
她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简简易上手,错误概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 性别男,若依是给女儿...