首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Quartz施用之:远程job的执行

2012-11-14 
Quartz使用之:远程job的执行quartz提供了远程执行job的功能。本篇文章通过具体的例子来演示这一功能。第一步

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 = Sched1org.quartz.scheduler.logger = schedLoggerorg.quartz.scheduler.rmi.proxy = trueorg.quartz.scheduler.rmi.registryHost = localhostorg.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 = 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


第三步:编译运行

将属性文件放在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 楼 yueliangwolf 2008-08-27   你想展示什么功能啊?我刚开始学,不懂

热点排行