Quartz使用之:远程job的执行

Quartz使用之:远程job的执行quartz提供了远程执行job的功能。本篇文章通过具体的例子来演示这一功能。第一步:建立以下几个文件:1.RemoteJob.java(远程要执行的任务,实现了Job接口)。2.RemoteClientLab.java(客户端程序,远程告诉Scheduler去执行一个任务)。3.client.properties(客户端属性文件)4.Rem

大家好,又见面了,我是你们的朋友全栈君。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  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159218.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • svn更换服务器地址_如何登录svn服务器

    svn更换服务器地址_如何登录svn服务器描述本文适用于服务器镜像复制的情况,即svn在原本的服务器上,在服务器控制台上,将原本服务器的镜像导入新的服务器中,因此可能并不适用于所有的情况;操作步骤1.将快到期的服务器镜像进行导出,在新的服务器上进入镜像导入,等待完成即可;2.由于是镜像复制,因此原本的svn配置一致,只需要修改分支绑定的服务器域名即可,如下所示:查看迁移后的svn项目绑定的服务器信息将当前项目目录中的.svn目录进行删除(保险起见,可以先进行备份)#进入项目cd/dir…/larave

    2022年10月2日
    2
  • 【OpenCV】Canny 边缘检测

    【OpenCV】Canny 边缘检测Canny边缘检测算法1986年,JOHNCANNY提出一个很好的边缘检测算法,被称为Canny编边缘检测器[1]。Canny边缘检测根据对信噪比与定位乘积进行测度,得到最优化逼近算子,也就是Canny算子。类似与LoG边缘检测方法,也属于先平滑后求导数的方法。使用Canny边缘检测器,图象边缘检测必须满足两个条件:能有效地抑制噪声;必须尽量精确确定边缘的位置。算

    2022年5月29日
    36
  • 判断Python输入是否为数字

    判断Python输入是否为数字判断 user 接收到的字符串是否为数字例如 user 78234 user isdigit str isdigit user 两种写法为 True 表示输入的所有字符都是数字 False 表示不是数字或者不全部为数字 str isalnum 所有字符都是数字或者字母 str isalpha 所有字符都是字母 str isdigit 所有字符都是数字 str islower

    2025年10月16日
    3
  • js漂浮广告代码_JavaScript上传文件代码

    js漂浮广告代码_JavaScript上传文件代码//浮动广告代码varx=50,y=60; //设置元素在浏览器窗口中的初始位置varxin=true,yin=true;//设置xin、yin用于判断元素是否在窗口范围内varstep=1; //可设置每次移动几像素varobj=document.getElementById(“Ad”);//通过id获取div元素functionfloatAd(){varL=T=0;varR=document.body.clientWidth-obj.off

    2022年9月20日
    5
  • 科学计算编程语言_中国发明了什么编程语言

    科学计算编程语言_中国发明了什么编程语言本文是《打破国外垄断,开发中国人自己的编程语言》系列文章的第1篇。本系列文章的主要目的是教大家学会如何从零开始设计一种编程语言(marvel语言),并使用marvel语言开发一些真实的项目,如移动App、Web应用等。

    2022年10月5日
    2
  • PS 命令之get-adgroupmember!

    PS 命令之get-adgroupmember!如果get-adgroup是查询我们的用户组的话,那么Get-adgroupmember就是查询出我们的组的成员的的命令了,这个命令的使用方式多数场景和我们的上面命令get-adgroup一起使用了。我们先来看怎么得出某个组的成员

    2022年7月13日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号