`
changkunyang
  • 浏览: 30873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

由删除聊天记录想到的技术支持方案之quartz浅析

    博客分类:
  • JAVA
阅读更多
   今天想调一下前几天的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中添加、修改和删除定时任务,以实现灵活的任务控制。 首先,我们需要理解Quartz的核心组件。主要有以下几个: 1. **Job**:这是执行任务的实际代码,代表一个可执行的工作单元...

    quartz官方数据库大全

    Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统...Quartz Scheduler包含许多企业级功能,例如支持JTA事务和集群。非要写描述,真是的~~~~~~~~~

    QuartzDemo及iis闲置时间解决方案

    Quartz和IIS是两种在IT领域中广泛使用的工具,它们分别用于任务调度和Web服务管理。这篇内容将深入探讨这两个概念以及如何解决IIS闲置时间的问题。 首先,让我们了解Quartz。Quartz是一个开源的Java作业调度框架,...

    quartz-2.2.3版本的quartz初始化sql语句

    Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息...

    关于spring中quartz的配置

    在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...

    quartz quartz-1.8.6 dbTables 建表sql

    版本1.8.6是Quartz的一个稳定版本,它包含了对数据库存储作业和触发器的支持。 在Quartz中,为了将任务和触发器的调度信息存储到数据库中,需要预先创建相应的数据库表。"dbTables" 文件正是为此目的提供的。这个...

    quartz在集群环境下的最终解决方案

    ### quartz在集群环境下的最终解决方案 #### 背景与挑战 随着系统复杂度的提高以及业务需求的变化,越来越多的应用程序需要支持高可用性和可扩展性。为了满足这些需求,通常会选择将应用程序部署在集群环境中。...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    Quartz的灵活性使得它能很好地适应这些需求,开发者可以根据业务逻辑定义不同的Job和Trigger,然后由Quartz负责调度执行。 关于触发器,CronTrigger允许我们根据cron表达式设置触发时间,这种表达式能精确到秒,...

    spring+quartz 动态任务方案

    ### Spring + Quartz 动态任务方案详解 #### 一、Spring与Quartz简介及整合背景 Spring 是一款轻量级的 Java 开发框架,旨在简化企业级应用开发过程中的复杂性,提供了一套完整的解决方案,包括但不限于依赖注入、...

    任务调度开源框架Quartz动态添加、修改和删除定时任务

    ### 任务调度开源框架Quartz动态添加、修改和删除定时任务 #### 一、Quartz框架简介 Quartz 是一个全面、开源的作业调度框架,为 Java 应用程序提供了简单而强大的作业调度机制。该框架支持多种类型的作业调度,...

    quartz的分布式调度大致分两种方式实现

    如果需要扩展以支持数千个短期运行(例如1秒)作业,则可以考虑通过使用多个不同的调度程序(包括HA的多个群集调度程序)对作业集进行分区。 调度程序使用集群范围的锁,这种模式会在添加更多节点(超过三个节点 - ...

    Quartz定时任务持久化数据表

    在分布式环境中,Quartz还支持集群,确保任务的高可用性。 Quartz的定时任务持久化是指将任务的相关信息(如触发器、作业详情)存储到数据库中,而不是仅仅保留在内存里。这样做的好处是,即使应用服务器重启,之前...

    Quartz所需jar包

    2. `slf4j-api.jar`:Simple Logging Facade for Java,Quartz依赖于它来进行日志记录,你可以根据自己的日志系统选择对应的实现,比如`logback-classic.jar`或`log4j.jar`。 3. `common-jdbc.jar`(可能包含):...

    quartz 定时任务调度

    Quartz具有高度的可扩展性,支持多线程和分布式环境,适用于大型企业级应用。 2. **Cron表达式** Cron表达式是Quartz中用于定义触发器时间规则的重要工具,源自Unix的crontab命令。它由六个或七个字段组成,每个...

    quartz2.2.1帮助手册

    6. **作业与触发器的生命周期管理**:Quartz 提供了API来管理作业和触发器,如暂停、恢复、删除和重新调度。 7. **并发处理**:Quartz 支持并发执行多个作业,可以控制同一时间执行的作业数量,避免资源争抢。 8. ...

    Quartz.NET 官方源码及演示例子

    2. **Quartz.2010.sln** 和 **Quartz.Server.2010.sln**:这是Visual Studio解决方案文件,用于打开和管理项目。Quartz.2010.sln可能包含Quartz.NET的主要组件,而Quartz.Server.2010.sln可能是服务器端应用示例。 ...

    quartz实例sqlserver数据库连接

    Quartz是一款开源的作业调度框架...通过这种方式,你可以利用Quartz的强大功能在SQL Server数据库的支持下实现复杂的时间调度逻辑。记住,配置和使用过程中要根据具体需求进行调整,并确保数据库连接的安全性和稳定性。

    quartz内部表.sql

    quartz内部表.sql。

    quartz实例,quartz入门例子

    2. **Job持久化**:Quartz支持将Job和Trigger存储在数据库中,确保在系统重启后仍能恢复调度。 3. **并发控制**:了解如何设置Job的并发策略,比如是否允许多个实例同时运行。 4. **Job状态管理**:理解Job的状态...

    quartz创建表sql

    Quartz 是一个开源的作业调度框架,广泛应用于Java企业级应用中,用于自动化任务执行,如定时触发工作流、发送邮件、数据同步等。在Quartz的部署和配置过程中,为了存储作业和触发器的信息,我们需要在关系型数据库...

Global site tag (gtag.js) - Google Analytics