`
longgangbai
  • 浏览: 7330314 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

           针对项目中的定时任务执行过程中,程序突然异常终止,重新启动,任务继续运行,那么需要将quartz进行持久化。针对网上的quartz的持久化多是和spring整合,由于项目中不一定采用spring做容器,所以没有采用网上千篇一律的和spring整合 的方式。

    1.首先说明一下我下载的quartz2.0版本,在quartz\docs\dbTables目录中选择mysql的脚本导入到数据库。

    2.配置quartz的持久化的配置文件quartz.properties.默认调度信息基于RAM的内存方式,重启之后调度状态信息丢失。

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.instanceName: QuartzJdbcScheduler
org.quartz.scheduler.instanceId: AUTO

org.quartz.scheduler.skipUpdateCheck: true

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 3
org.quartz.threadPool.threadPriority: 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold: 60000

#org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties: false
org.quartz.jobStore.dataSource: myDS
org.quartz.jobStore.tablePrefix: QRTZ_
org.quartz.jobStore.isClustered: false

#============================================================================
# Configure Datasources  
#============================================================================

org.quartz.dataSource.myDS.driver: com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL: jdbc:mysql://localhost:3306/quartz
org.quartz.dataSource.myDS.user: root
org.quartz.dataSource.myDS.password: root
org.quartz.dataSource.myDS.maxConnections: 5

 

3.创建简单的job任务

package com.easyway.app.quartz.jdbc;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 一个简单的定时任务
 * @author longgangbai
 *
 */
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());
    }

}

 

4.创建触发器并调度相关的任务

package com.easyway.app.quartz.jdbc;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 一个简单测试Quartz各种调度信息保存数据库的类
 *
 * @author longgangbai
 *
 */
public class ScheduleMain {

   
    public void run() throws Exception {
        Logger log = LoggerFactory.getLogger(ScheduleMain.class);

        log.info("------- Initializing ----------------------");

        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();
       
       
       
        log.info("------- Initialization Complete -----------");

        // computer a time that is on the next round minute
        Date runTime = evenMinuteDate(new Date());

        log.info("------- Scheduling Job  -------------------");

        // define the job and tie it to our HelloJob class
        JobDetail job = newJob(HelloJob.class)
            .withIdentity("job1", "group1")
            .build();
       
        // Trigger the job to run on the next round minute
        CronTrigger trigger = newTrigger()
        .withIdentity("trigger1", "group1")
        .withSchedule(cronSchedule("0/20 * * * * ?"))
        .startNow()
        .build();
       
        // Tell quartz to schedule the job using our trigger
        sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " will run at: " + runTime); 

        // Start up the scheduler (nothing can actually run until the
        // scheduler has been started)
        sched.start();

        log.info("------- Started Scheduler -----------------");

        // wait long enough so that the scheduler as an opportunity to
        // run the job!
        log.info("------- Waiting 65 seconds... -------------");
        try {
            // wait 65 seconds to show job
            Thread.sleep(65L * 1000L);
            // executing...
        } catch (Exception e) {
        }

        // shut down the scheduler
        log.info("------- Shutting Down ---------------------");
        sched.shutdown(true);
        log.info("------- Shutdown Complete -----------------");
    }

    public static void main(String[] args) throws Exception {

        ScheduleMain example = new ScheduleMain();
        example.run();

    }

}

 

分享到:
评论

相关推荐

    quartz的持久化

    1. **JDBC 持久化**:这是 Quartz 最常见且推荐的持久化方式。Quartz 提供了一套 SQL 脚本,用户可以将其运行在支持的数据库上,创建所需的表结构。然后,Quartz 的 JobStore 实现(如 `org.quartz.impl....

    Quartz.net 3.0.7.0数据库持久化.rar

    数据库持久化是Quartz.NET中的关键功能,它确保了任务调度信息在系统重启或故障后不会丢失。当使用数据库持久化时,所有的作业(Jobs)和触发器(Triggers)都会被存储在数据库中。这样,即使应用程序或服务器崩溃,...

    quartz 持久化数据库表结构sql

    Quartz的持久化机制依赖于一组特定的数据库表,这些表存储了Job(任务)和Trigger(触发器)的信息。以下是Quartz默认使用的数据库表: 1. QRTZ_JOB_DETAILS:存储Job的详细信息,如Job类名、是否持久化、组名等。 ...

    quartz1.6.6 持久化实例

    Quartz是Java领域一款强大的开源任务...了解并掌握以上知识点,你就能创建和管理自己的Quartz持久化任务,实现高效稳定的定时任务执行。在实际应用中,Quartz的强大灵活性和扩展性使其成为很多复杂定时任务场景的首选。

    Quartz2.0持久化到数据库

    在“Quartz2.0持久化到数据库”这个主题中,我们将深入探讨如何将Quartz2.0的任务调度信息存储到数据库中,以便在系统重启或故障后能够恢复任务,并提供更可靠的调度服务。 首先,理解Quartz2.0的持久化机制至关...

    Quartz持久化资料大全

    一、Quartz持久化的意义 1. 任务恢复:当系统发生故障或重启时,能够恢复之前设置的任务,保证任务的连续性。 2. 资源优化:将任务状态保存在数据库中,减少内存压力,提高系统的稳定性和可靠性。 二、Quartz持久化...

    springboot2.3集成quartz定时任务持久化数据库,支持集群

    在本文中,我们将深入探讨如何在Spring Boot 2.3版本中集成Quartz定时任务,并实现其持久化到数据库,以便支持集群环境。这个过程的关键在于配置Quartz Scheduler,设置数据库连接,以及确保任务在多节点环境中能够...

    Quartz.Net进阶-持久化管理.doc

    任务调度的持久化功能,即新增修改删除之类的功能,这必须得要有的,不然都不知道后台都有什么作业在跑

    quartz界面化持久化管理

    2. **Quartz持久化**: - Quartz支持多种持久化机制,如JDBC JobStore、RAMJobStore等。JDBC JobStore将任务和触发器信息保存在数据库中,确保系统重启后任务不会丢失。 3. **自定义Job类**: - 开发者需要继承`...

    quartz 持久化数据库表

    使用Quartz持久化功能时,还需要配置Scheduler的属性,如数据源、表前缀等,这通常在`quartz.properties`配置文件中进行。正确配置后,Quartz会在启动时自动将任务信息写入数据库,同时在系统重启后能从数据库中恢复...

    Quartz持久化参考资料大全

    在企业级应用中,为了保证服务的高可用性和任务的连续性,往往需要将调度信息持久化到数据库中,这就是所谓的Quartz持久化。Quartz2.2版本在前一版本的基础上进行了优化和增强,提供了更加稳定和灵活的持久化机制。 ...

    quartz job持久化

    1 通过quartz创建持久化定时执行任务 3 1.1 首先创建一个基本的web工程,所需jar包 3 1.2 Quartz配置文件quartz.properties 4 1.3 创建job 6 1.3.1 实现org.quartz.Job接口 6 1.3.2 把以上job持久化到数据库中 6 1.4...

    Quartz2.2-JobStore持久化到数据库

    最后,当应用程序启动时,Quartz会使用配置的JobStore将作业和触发器的信息持久化到数据库,即使应用程序重启,也能恢复之前的状态,继续执行已安排的任务。 总结,Quartz 2.2.0的JobStore持久化到数据库功能提供了...

    Quartz2.2.1存储与持久化-基于Spring的配置

    在Quartz 2.2.1版本中,对存储和持久化进行了优化,以支持更高效、可靠的作业调度。在这个基于Spring的配置中,我们将深入探讨如何在Spring应用中集成Quartz,实现任务的存储和持久化。 首先,我们需要在Spring配置...

    Quartz.NET+TopSelf (Asp.Net Core版)实现定时服务,支持Job持久化和集群,异常重启.rar

    Quartz.NET+TopSelf 实现定时服务,支持Job持久化和集群,异常重启 介绍:https://blog.csdn.net/qq_27559331/article/details/105067550 如果你觉得对你有用,麻烦你给个好评!

    quartz2.0 数据库持久化 图形化管理界面代码示例

    在“quartz2.0 数据库持久化 图形化管理界面代码示例”中,我们关注的是如何通过数据库来保存和管理 Quartz 的任务信息,并且通过图形化的用户界面进行操作。 1. **数据库持久化**:在 Quartz 2.0 中,任务和触发器...

    quartz持久化建表pdm

    quartz持久化建表pdm,任务调度持久化所需要的12张表-QRTZ开头,外带三张项目中附加的,供参考,记录

    quartz1.8.6数据库持久化

    在1.8.6版本中,Quartz提供了数据库持久化的功能,这使得任务调度的状态能够在系统重启后得以恢复,增强了系统的可靠性和稳定性。数据库持久化是通过将作业和触发器的信息存储在关系型数据库中实现的。 Spring框架...

    Quartz定时任务持久化数据表

    Quartz的定时任务持久化是指将任务的相关信息(如触发器、作业详情)存储到数据库中,而不是仅仅保留在内存里。这样做的好处是,即使应用服务器重启,之前设定的任务也不会丢失,因为它们可以从数据库中重新加载。...

    quartz持久化语句2021

    在分布式系统中,为了保证任务的可靠性和持久性,Quartz提供了数据库持久化功能,即将作业(Jobs)和触发器(Triggers)的信息存储在数据库中。这样,即使应用程序重启或服务器故障,任务调度信息也不会丢失,能够...

Global site tag (gtag.js) - Google Analytics