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
分享到:
相关推荐
1. **作业与触发器**:在Quartz.NET中,任务被称为“作业”(Job),而触发任务执行的时间或规则称为“触发器”(Trigger)。开发者可以自定义作业类,实现特定的业务逻辑。 2. **持久化支持**:Quartz.NET支持将...
- **监控与管理**:使用 Quartz 提供的 API 监控作业状态,或通过 JMX 进行远程管理。 4. **文档资源** - `quartz-2.2.3` 文件可能包含 Quartz 的源码、API 文档、示例代码等,这些资源对于深入理解 Quartz 内部...
2. **Job**:Job 是需要执行的任务的抽象,它是 Quartz 中的接口。当你需要调度一个新的任务时,你需要创建一个类实现 Job 接口,并重写 `execute` 方法,这是实际执行任务的入口点。例如,DumbJob 类在示例中是一个...
7. **监控与管理**:Quartz.NET提供了Web管理界面(如`DotNetScheduler`),可以实时查看和管理任务状态,也可以通过API接口进行远程控制。 通过上述知识,你不仅可以理解C# Quartz定时任务的基本原理,还能构建...
在项目中,我们可以通过Quartz来调度Dubbo接口,使得定时任务能够调用远程服务。HTTP Job则是通过HTTP请求来执行任务,这种方式更加灵活,可以调用任何暴露HTTP接口的服务。 要实现动态配置,我们需要一个用户界面...
Trigger则通过`org.quartz.Trigger`接口定义触发Job执行的时间策略,如SimpleTrigger和CronTrigger分别对应简单的延时触发和基于cron表达式的周期触发。 2. **Spring对Quartz的集成** - **配置方式**:Spring通过`...
- 使用Quartz的`SchedulerListener`和`JobListener`可以监听调度和任务执行的事件。 6. **源码分析** - 深入研究Quartz的源码,有助于理解其内部工作原理,如JobStore的实现(内存、数据库等)、调度算法等,这有...
Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度可配置性,灵活性和稳定性,使得开发人员可以轻松地在C#项目中实现复杂的定时任务逻辑。 首先,理解Quartz.NET的核心...
- 创建一个实现了`org.quartz.Job`接口的类,这个类将代表你要执行的任务。你需要覆盖`execute(JobExecutionContext context)`方法,编写实际的业务逻辑。 3. **创建JobDetail** - 使用`JobBuilder`创建一个`...
6. **作业(Job)和触发器(Trigger)**:在Quartz.NET中,作业定义了实际要执行的任务,而触发器定义了何时执行作业。你可以根据需要创建多个作业和触发器组合,以实现复杂的调度需求。 7. **持久化**:Quartz.NET...
任务调度是 Quartz 的核心功能之一,提供了丰富的触发器(Trigger)类型,允许按照各种条件来触发任务执行: - **时间精度**:可以设置任务在一天中的任意时间点执行,精确到毫秒。 - **周/月/年周期**:可以设置...
- 调试与监控:利用日志系统跟踪Quartz的运行状态,可以使用Quartz提供的监控工具(如` quartz-admin.jar`)进行远程监控和管理。 综上所述,使用Quartz时,正确引入和配置相关的jar包是确保程序正常运行的关键。...
- **Job**:Job是Quartz中的基本工作单元,它定义了需要执行的任务。一个Job类需要实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法来定义任务的具体行为。 - **Trigger**:Trigger...
- **Job**:在 Quartz.NET 中,Job 是一个执行实际工作的类,它实现了 `IJob` 接口。你可以定义自己的 Job 类来执行你需要的任务。 - **Trigger**:Trigger 定义了 Job 的执行时间规则,例如按时间间隔、日期或...
这个类需要实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法,该方法是Quartz执行任务时调用的: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org...
Quartz是Java领域的一款强大的开源任务调度框架,用于在应用程序中安排和执行周期性任务。在版本2.4.0-SNAPSHOT中,它提供了一个预发布版本的更新,这通常意味着开发者可以提前试用新功能和改进,但可能包含未解决的...
Quartz 是一个强大的任务调度框架,它允许开发者创建和安排任务执行,以便在特定时间自动触发。Quartz 的设计灵活性高,可以轻松地融入各种Java应用程序,包括独立应用、应用服务器和Servlet容器。以下是关于Quartz...
6. **任务执行管理**:Quartz 允许开发者通过实现简单的 Job 接口来定义任务,并且可以跟踪任务的执行状态,包括执行前后的事件通知以及任务的执行结果。 7. **持久化支持**:Quartz 提供了多种持久化选项,如 ...
### xxl-job 架构详解 #### 一、概述 xxl-job 是一款轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻...无论是对于初学者还是有经验的开发者来说,xxl-job 都是一个值得深入了解和使用的优秀项目。
然后,使用 `MethodInvokingJobDetailFactoryBean` 来创建一个 Job 实例。这个 Bean 会调用之前定义的 `myJob` Bean 的 `run()` 方法。在这里,`targetObject` 属性指向 `myJob`,`targetMethod` 属性设置为 `run`,...