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); }}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(); }}# Configure Main Scheduler Properties ======================================org.quartz.scheduler.instanceName = Sched1org.quartz.scheduler.logger = schedLoggerorg.quartz.scheduler.rmi.proxy = trueorg.quartz.scheduler.rmi.registryHost = localhostorg.quartz.scheduler.rmi.registryPort = 1099
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(); }}#============================================================================# Configure Main Scheduler Properties #============================================================================org.quartz.scheduler.instanceName = Sched1org.quartz.scheduler.rmi.export = trueorg.quartz.scheduler.rmi.registryHost = localhostorg.quartz.scheduler.rmi.registryPort = 1099org.quartz.scheduler.rmi.createRegistry = true#============================================================================# Configure ThreadPool #============================================================================org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount = 10org.quartz.threadPool.threadPriority = 5#============================================================================# Configure JobStore #============================================================================org.quartz.jobStore.misfireThreshold = 60000org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore