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

Quartz使用之:远程job的执行

阅读更多
quartz提供了远程执行job的功能。本篇文章通过具体的例子来演示这一功能。

第一步:建立以下几个文件:

1.RemoteJob.java

  远程要执行的任务,实现了Job接口。

2.RemoteClientLab.java

  客户端程序,远程告诉Scheduler去执行一个任务。

3.client.properties

  客户端属性文件

4.RemoteServerLab.java

  服务器程序,监听端口,接到客户端的请求后按要求执行任务。

5.server.properties

  服务器属性文件


第二步:实现


1.RemoteJob.java

package lab.quartz.lab12;

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 RemoteJob implements Job {

    public static final String MESSAGE = "msg";

    private static Log _log = LogFactory.getLog(RemoteJob.class);

    public RemoteJob() {
    }

    public void execute(JobExecutionContext context)
        throws JobExecutionException {

        String jobName = context.getJobDetail().getFullName();
        String message = (String) context.getJobDetail().getJobDataMap().get(MESSAGE);

        _log.info("SimpleJob: " + jobName + " executing at " + new Date());
        _log.info("SimpleJob: msg: " + message);
    }
}


2.RemoteClientLab.java


package lab.quartz.lab12;

import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class RemoteClientLab{

    public void run() throws Exception {

        Log log = LogFactory.getLog(RemoteClientLab.class);

        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        // define the job and ask it to run
        JobDetail job = 
            new JobDetail("remotelyAddedJob", "default", RemoteJob.class);
        JobDataMap map = new JobDataMap();
        map.put("msg", "Your remotely added job has executed!");
        job.setJobDataMap(map);
        CronTrigger trigger = new CronTrigger(
                "remotelyAddedTrigger", "default",
                "remotelyAddedJob", "default", 
                new Date(), 
                null, 
                "/5 * * ? * *");

        // schedule the job
        sched.scheduleJob(job, trigger);

        log.info("Remote job scheduled.");
    }

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

        RemoteClientLab example = new RemoteClientLab();
        example.run();
    }

}


3.client.properties

# Configure Main Scheduler Properties  ======================================
org.quartz.scheduler.instanceName = Sched1
org.quartz.scheduler.logger = schedLogger
org.quartz.scheduler.rmi.proxy = true
org.quartz.scheduler.rmi.registryHost = localhost
org.quartz.scheduler.rmi.registryPort = 1099


4.RemoteServerLab.java

package lab.quartz.lab12;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.impl.StdSchedulerFactory;

public class RemoteServerLab {

    public void run() throws Exception {
        Log log = LogFactory.getLog(RemoteServerLab.class);

        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        log.info("------- Initialization Complete -----------");

        log.info("------- (Not Scheduling any Jobs - relying on a remote client to schedule jobs --");

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

        // start the schedule
        sched.start();

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

        log.info("------- Waiting ten minutes... ------------");

        // wait five minutes to give our jobs a chance to run
        try {
            Thread.sleep(600L * 1000L);
        } catch (Exception e) {
        }

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

        SchedulerMetaData metaData = sched.getMetaData();
        log.info("Executed " + metaData.numJobsExecuted() + " jobs.");
    }

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

        RemoteServerLab example = new RemoteServerLab();
        example.run();
    }

}


5.server.properties
#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.instanceName = Sched1
org.quartz.scheduler.rmi.export = true
org.quartz.scheduler.rmi.registryHost = localhost
org.quartz.scheduler.rmi.registryPort = 1099
org.quartz.scheduler.rmi.createRegistry = true

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

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5

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

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore


第三步:编译运行

将属性文件放在classes的根目录。classpath中增加需要的jar包。

1.启动服务器

java -Dorg.quartz.properties=server.properties lab.quartz.lab12.RemoteServerRemote

2.启动客户端

java -Dorg.quartz.properties=client.properties lab.quartz.lab12.RemoteClientRemote

0
0
分享到:
评论
1 楼 yueliangwolf 2008-08-27  
你想展示什么功能啊?我刚开始学,不懂

相关推荐

    C# quartz.net 定时任务源码 可以远程控制

    1. **作业与触发器**:在Quartz.NET中,任务被称为“作业”(Job),而触发任务执行的时间或规则称为“触发器”(Trigger)。开发者可以自定义作业类,实现特定的业务逻辑。 2. **持久化支持**:Quartz.NET支持将...

    quartz2.2.3实战

    - **监控与管理**:使用 Quartz 提供的 API 监控作业状态,或通过 JMX 进行远程管理。 4. **文档资源** - `quartz-2.2.3` 文件可能包含 Quartz 的源码、API 文档、示例代码等,这些资源对于深入理解 Quartz 内部...

    Quartz使用指南

    2. **Job**:Job 是需要执行的任务的抽象,它是 Quartz 中的接口。当你需要调度一个新的任务时,你需要创建一个类实现 Job 接口,并重写 `execute` 方法,这是实际执行任务的入口点。例如,DumbJob 类在示例中是一个...

    C#Quartz定时任务

    7. **监控与管理**:Quartz.NET提供了Web管理界面(如`DotNetScheduler`),可以实时查看和管理任务状态,也可以通过API接口进行远程控制。 通过上述知识,你不仅可以理解C# Quartz定时任务的基本原理,还能构建...

    springquartz源码

    Trigger则通过`org.quartz.Trigger`接口定义触发Job执行的时间策略,如SimpleTrigger和CronTrigger分别对应简单的延时触发和基于cron表达式的周期触发。 2. **Spring对Quartz的集成** - **配置方式**:Spring通过`...

    Quartz 定时任务web使用

    - 使用Quartz的`SchedulerListener`和`JobListener`可以监听调度和任务执行的事件。 6. **源码分析** - 深入研究Quartz的源码,有助于理解其内部工作原理,如JobStore的实现(内存、数据库等)、调度算法等,这有...

    C#实现quartz.net 定时任务源码 可以远程控制

    Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度可配置性,灵活性和稳定性,使得开发人员可以轻松地在C#项目中实现复杂的定时任务逻辑。 首先,理解Quartz.NET的核心...

    springboot+quartz集群:通过动态配置调度dubbo接口/http接口代码实现

    在项目中,我们可以通过Quartz来调度Dubbo接口,使得定时任务能够调用远程服务。HTTP Job则是通过HTTP请求来执行任务,这种方式更加灵活,可以调用任何暴露HTTP接口的服务。 要实现动态配置,我们需要一个用户界面...

    quartz使用实例

    - 创建一个实现了`org.quartz.Job`接口的类,这个类将代表你要执行的任务。你需要覆盖`execute(JobExecutionContext context)`方法,编写实际的业务逻辑。 3. **创建JobDetail** - 使用`JobBuilder`创建一个`...

    JobDemo C# quartz.net.zip

    6. **作业(Job)和触发器(Trigger)**:在Quartz.NET中,作业定义了实际要执行的任务,而触发器定义了何时执行作业。你可以根据需要创建多个作业和触发器组合,以实现复杂的调度需求。 7. **持久化**:Quartz.NET...

    定时器Quartz使用说明

    任务调度是 Quartz 的核心功能之一,提供了丰富的触发器(Trigger)类型,允许按照各种条件来触发任务执行: - **时间精度**:可以设置任务在一天中的任意时间点执行,精确到毫秒。 - **周/月/年周期**:可以设置...

    使用quartz需要的jar包

    - 调试与监控:利用日志系统跟踪Quartz的运行状态,可以使用Quartz提供的监控工具(如` quartz-admin.jar`)进行远程监控和管理。 综上所述,使用Quartz时,正确引入和配置相关的jar包是确保程序正常运行的关键。...

    Quartz开发指南

    - **Job**:Job是Quartz中的基本工作单元,它定义了需要执行的任务。一个Job类需要实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法来定义任务的具体行为。 - **Trigger**:Trigger...

    Quartz.NET 可加载到服务

    - **Job**:在 Quartz.NET 中,Job 是一个执行实际工作的类,它实现了 `IJob` 接口。你可以定义自己的 Job 类来执行你需要的任务。 - **Trigger**:Trigger 定义了 Job 的执行时间规则,例如按时间间隔、日期或...

    spring定时任务之Quartz

    这个类需要实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法,该方法是Quartz执行任务时调用的: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org...

    quartz-2.4.0-SNAPSHOT-distribution.tar.gz

    Quartz是Java领域的一款强大的开源任务调度框架,用于在应用程序中安排和执行周期性任务。在版本2.4.0-SNAPSHOT中,它提供了一个预发布版本的更新,这通常意味着开发者可以提前试用新功能和改进,但可能包含未解决的...

    人物调度Quartz 学习

    Quartz 是一个强大的任务调度框架,它允许开发者创建和安排任务执行,以便在特定时间自动触发。Quartz 的设计灵活性高,可以轻松地融入各种Java应用程序,包括独立应用、应用服务器和Servlet容器。以下是关于Quartz...

    Quartz开发指南.pdf

    6. **任务执行管理**:Quartz 允许开发者通过实现简单的 Job 接口来定义任务,并且可以跟踪任务的执行状态,包括执行前后的事件通知以及任务的执行结果。 7. **持久化支持**:Quartz 提供了多种持久化选项,如 ...

    xxl-job 架构图

    ### xxl-job 架构详解 #### 一、概述 xxl-job 是一款轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻...无论是对于初学者还是有经验的开发者来说,xxl-job 都是一个值得深入了解和使用的优秀项目。

    quartz 定时任务调度

    然后,使用 `MethodInvokingJobDetailFactoryBean` 来创建一个 Job 实例。这个 Bean 会调用之前定义的 `myJob` Bean 的 `run()` 方法。在这里,`targetObject` 属性指向 `myJob`,`targetMethod` 属性设置为 `run`,...

Global site tag (gtag.js) - Google Analytics