今天想调一下前几天的51聊天消息看看,郁闷的是居然发现上个月(今天9月4号)的消息被删除掉了。51的解释是“系统每隔一个月清空一次短消息记录”。可能是程序员的通病,遇上比较有意思的事第一反应就是怎么实现的?
当然我是不知道51是怎么实现的,但是我知道如果我来做的话,我会怎么实现。以前也有遇上过定期维护数据库的问题,比如删除临时表的记录,比如删除用户登陆的记录。通常都是在后台启动一个线程,让它去执行,但是单独的java的线程很让人郁闷,于是上网搜到一个叫Quartz的开源工具,其官方解释“Quartz 是个开放源码项目,提供了丰富的作业调度集。”(具体介绍可参考http://www.ibm.com/developerworks/cn/java/j-quartz/)。
那么在WEB的APPLICATION中怎么应用Quartz?follow me!
一、下载相应的包。
下载 Quartz API。
解压缩并把 quartz-x.x.x.jar 放在项目文件夹内,或者把文件放在项目的类路径中。
把 core 和/或 optional 文件夹中的 jar 文件放在项目的文件夹或项目的类路径中。
如果使用 JDBCJobStore,把所有的 JDBC jar 文件放在项目的文件夹或项目的类路径中。
二、开始编写你的HELLO WORLD
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Helloworld implements Job{
public Helloworld() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Hello World!");
//真正在项目的应用中,这里你可以做任何你想做的操作。
}
}
三、调用线程。
怎么调呢?你只要知道三个相关的配置文件就可以。
1。quartz.properties (注意,这个文件的名字默认),其内容如下
#=============================================================
# Configure Main Scheduler Properties
#=============================================================
org.quartz.scheduler.instanceName =org.quartz.scheduler.instanceId = AUTO
#=============================================================
# Configure ThreadPool
#=============================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#=============================================================
# Configure Plugins
#=============================================================
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = /quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
注意到org.quartz.plugin.jobInitializer.fileName = /quartz_jobs.xml了吗?对!接下来就是quartz_jobs.xml,配置如下:
<?xml version="1.0" encoding="GBK"?>
<quartz>
<job>
<job-detail>
<name>Helloworld</name>
<group>DEFAULT</group>
<job-class>com.yck.timer.Helloworld</job-class>
</job-detail>
<trigger>
<cron>
<name>hw</name>
<group>DEFAULT</group>
<job-name>Helloworld</job-name>
<job-group>DEFAULT</job-group>
<cron-expression>0 30 0 * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
可以看到,在配置文件中把jobdetail和trigger都作了完整的定义,并组合成一个job。
注意这一行:<cron-expression>0 30 0 * * ?</cron-expression>,它定义了什么时候调度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>
启动服务看看,是不是在在控制台看见了“hello world!”?
补充:Cron-Expression配置说明
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选)留空, 1970-2099 , - * /
Cron 配置说明
表示方式
意义
"0 0 12 * * ?"
Fire at 12pm (noon) every day
"0 15 10 ? * *"
Fire at 10:15am every day
"0 15 10 * * ?"
Fire at 10:15am every day
"0 15 10 * * ? *"
Fire at 10:15am every day
"0 15 10 * * ? 2005"
Fire at 10:15am every day during the year 2005
"0 * 14 * * ?"
Fire every minute starting at 2pm and ending at 2:59pm, every day
"0 0/5 14 * * ?"
Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
"0 0/5 14,18 * * ?"
Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
"0 0-5 14 * * ?"
Fire every minute starting at 2pm and ending at 2:05pm, every day
"0 10,44 14 ? 3 WED"
Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
"0 15 10 ? * MON-FRI"
Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
"0 15 10 15 * ?"
Fire at 10:15am on the 15th day of every month
"0 15 10 L * ?"
Fire at 10:15am on the last day of every month
"0 15 10 ? * 6L"
Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L"
Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L 2002-2005"
Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
"0 15 10 ? * 6#3"
Fire at 10:15am on the third Friday of every month
分享到:
相关推荐
本教程将详细介绍如何动态地在Quartz中添加、修改和删除定时任务,以实现灵活的任务控制。 首先,我们需要理解Quartz的核心组件。主要有以下几个: 1. **Job**:这是执行任务的实际代码,代表一个可执行的工作单元...
Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统...Quartz Scheduler包含许多企业级功能,例如支持JTA事务和集群。非要写描述,真是的~~~~~~~~~
Quartz和IIS是两种在IT领域中广泛使用的工具,它们分别用于任务调度和Web服务管理。这篇内容将深入探讨这两个概念以及如何解决IIS闲置时间的问题。 首先,让我们了解Quartz。Quartz是一个开源的Java作业调度框架,...
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息...
在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...
版本1.8.6是Quartz的一个稳定版本,它包含了对数据库存储作业和触发器的支持。 在Quartz中,为了将任务和触发器的调度信息存储到数据库中,需要预先创建相应的数据库表。"dbTables" 文件正是为此目的提供的。这个...
### quartz在集群环境下的最终解决方案 #### 背景与挑战 随着系统复杂度的提高以及业务需求的变化,越来越多的应用程序需要支持高可用性和可扩展性。为了满足这些需求,通常会选择将应用程序部署在集群环境中。...
Quartz的灵活性使得它能很好地适应这些需求,开发者可以根据业务逻辑定义不同的Job和Trigger,然后由Quartz负责调度执行。 关于触发器,CronTrigger允许我们根据cron表达式设置触发时间,这种表达式能精确到秒,...
### Spring + Quartz 动态任务方案详解 #### 一、Spring与Quartz简介及整合背景 Spring 是一款轻量级的 Java 开发框架,旨在简化企业级应用开发过程中的复杂性,提供了一套完整的解决方案,包括但不限于依赖注入、...
### 任务调度开源框架Quartz动态添加、修改和删除定时任务 #### 一、Quartz框架简介 Quartz 是一个全面、开源的作业调度框架,为 Java 应用程序提供了简单而强大的作业调度机制。该框架支持多种类型的作业调度,...
如果需要扩展以支持数千个短期运行(例如1秒)作业,则可以考虑通过使用多个不同的调度程序(包括HA的多个群集调度程序)对作业集进行分区。 调度程序使用集群范围的锁,这种模式会在添加更多节点(超过三个节点 - ...
在分布式环境中,Quartz还支持集群,确保任务的高可用性。 Quartz的定时任务持久化是指将任务的相关信息(如触发器、作业详情)存储到数据库中,而不是仅仅保留在内存里。这样做的好处是,即使应用服务器重启,之前...
2. `slf4j-api.jar`:Simple Logging Facade for Java,Quartz依赖于它来进行日志记录,你可以根据自己的日志系统选择对应的实现,比如`logback-classic.jar`或`log4j.jar`。 3. `common-jdbc.jar`(可能包含):...
Quartz具有高度的可扩展性,支持多线程和分布式环境,适用于大型企业级应用。 2. **Cron表达式** Cron表达式是Quartz中用于定义触发器时间规则的重要工具,源自Unix的crontab命令。它由六个或七个字段组成,每个...
6. **作业与触发器的生命周期管理**:Quartz 提供了API来管理作业和触发器,如暂停、恢复、删除和重新调度。 7. **并发处理**:Quartz 支持并发执行多个作业,可以控制同一时间执行的作业数量,避免资源争抢。 8. ...
2. **Quartz.2010.sln** 和 **Quartz.Server.2010.sln**:这是Visual Studio解决方案文件,用于打开和管理项目。Quartz.2010.sln可能包含Quartz.NET的主要组件,而Quartz.Server.2010.sln可能是服务器端应用示例。 ...
Quartz是一款开源的作业调度框架...通过这种方式,你可以利用Quartz的强大功能在SQL Server数据库的支持下实现复杂的时间调度逻辑。记住,配置和使用过程中要根据具体需求进行调整,并确保数据库连接的安全性和稳定性。
quartz内部表.sql。
2. **Job持久化**:Quartz支持将Job和Trigger存储在数据库中,确保在系统重启后仍能恢复调度。 3. **并发控制**:了解如何设置Job的并发策略,比如是否允许多个实例同时运行。 4. **Job状态管理**:理解Job的状态...
Quartz 是一个开源的作业调度框架,广泛应用于Java企业级应用中,用于自动化任务执行,如定时触发工作流、发送邮件、数据同步等。在Quartz的部署和配置过程中,为了存储作业和触发器的信息,我们需要在关系型数据库...