此代码示例通过RMI协议向Scheduler调度器远程添加job任务。

代码文件包括:job任务类(SimpleJob.java)、RMI服务端server类(RemoteServerExample.java)、RMI客户端client类(RemoteClientExample.java)。

注意:job任务类与client客户端在同一个应用里。

RMI服务端server类(RemoteServerExample.java)

先设置server端的定时配置quartz.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

RemoteServerExample.java 类代码:

package org.quartz.examples.example12;

import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 这个示例将生成大量要运行的作业
*/
public class RemoteServerExample {
Logger LOG = LoggerFactory.getLogger(RemoteServerExample.class); public void run() throws Exception { // 初始化一个调度工厂,并实例化一个调度类
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); sched.start(); try {
Thread.sleep(300L * 1000L);
} catch (Exception e) {
//
} sched.shutdown(true);
LOG.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData();
LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { RemoteServerExample example = new RemoteServerExample();
example.run();
} }

job任务类(SimpleJob.java)

 

package org.quartz.examples.example12;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey; /**
* 一个愚蠢的作业实现,用于单元测试。
*/
public class SimpleJob implements Job { public static final String MESSAGE = "msg"; private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class); // 必须要有public修饰的无参构造函数
public SimpleJob() {
} // 任务执行方法
public void execute(JobExecutionContext context) throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
String message = (String) context.getJobDetail().getJobDataMap().get(MESSAGE);
LOG.info("任务执行1。SimpleJob: " + jobKey + " executing at " + new Date());
LOG.info("任务执行2。SimpleJob: msg: " + message);
} }

RMI客户端client类(RemoteClientExample.java)

设置client端的定时配置quartz.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 //重点

RemoteClientExample.java类代码:

package org.quartz.examples.example12;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger; import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 这个示例是一个客户机程序,它将与调度程序进行远程通信以调度作业。
* 在本例中,我们将需要使用JDBC作业存储。客户机将远程连接到JDBC作业存储以调度作业。
*/
public class RemoteClientExample {
static Logger LOG = LoggerFactory.getLogger(RemoteClientExample.class); public void run() throws Exception {
// 初始化一个调度工厂,并实例化一个调度类
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); // 定义一个job任务,远程添加到调度器的任务
// group: default, job: remotelyAddedJob
JobDetail job = newJob(SimpleJob.class)
.withIdentity("remotelyAddedJob", "default")
.build(); JobDataMap map = job.getJobDataMap();
map.put("msg", "Your remotely added job has executed!"); Trigger trigger = newTrigger()
.withIdentity("remotelyAddedTrigger", "default")
.forJob(job.getKey())
.withSchedule(cronSchedule("0/2 * * * * ?"))
.build();
sched.scheduleJob(job, trigger); LOG.info("Remote job scheduled.");
} public static void main(String[] args) throws Exception { RemoteClientExample example = new RemoteClientExample();
example.run(); } }

quartz2.3.0(十二)通过RMI协议向Scheduler调度器远程添加job任务的更多相关文章

  1. quartz2.3.0(二)触发器Trigger花式Scheduler调度job

    任务类 package org.quartz.examples.example2; import java.util.Date; import org.slf4j.Logger; import org ...

  2. JAVA学习第六十二课 — TCP协议练习

    通过练习掌握TCP在进行传输过程中的问题 练习1:创建一个英文大写转换server client输入字母数据,发送给服务端,服务端收到后显示到控制台,并将该数据转成大写返回client,知道clien ...

  3. github上十二款最著名的Android播放器开源项目

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  4. opencv探索之路(十二):感兴趣区域ROI和logo添加技术

    在图像处理领域,有一个非常重要的名词ROI. 什么是ROI? 它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域. 感兴趣区域,就是我们从图像中选择一个图像区域,这个区域 ...

  5. python练习六十二:文件处理,往文件中所有添加指定的前缀

    往文件中所有添加指定的前缀 方法一:open方法 f_r = open('text.txt') f_w = open('text_new.txt','w+') i = 0 while True: i ...

  6. ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)

    一.创建发布器节点 1 节点功能: 不断的在ROS网络中广播消息 2 创建节点 (1)打开工作空间目录 cd ~/catkin_ws/src/beginner_tutorials 创建一个发布器节点( ...

  7. 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

    从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍. 要做一个认证管理,大概分为以下5步: 1.  定义你要保护的资源,一般 ...

  8. 七十二、SAP中内表的修改,添加条件语句,多条目修改

    一.代码如下 二.MODIFY执行前断点数据 三.查看到数据如下 四.往下单步走一步,发现有3条数据被修改 五.执行后修改如下

  9. 一百三十二:CMS系统之前端动态获取后台添加的轮播图

    先准备几张轮播图 排序顺序改为根据优先级倒序排 前端首页接口 @bp.route('/')def index(): banners = BannerModel.query.order_by(Banne ...

随机推荐

  1. Linux下的nexus数据迁移

    刚到公司没多久,目前公司有两个项目公用一个nexus的maven私服,现在想把两个私服的jar包拆分开: 我在原私服的nexus服务器中, 1.备份原nexus使用命令 完成tar包的压缩 打包完毕后 ...

  2. 安装Rancher容器化管理平台

    卸载已有的避免冲突 yum remove docker  docker-common docker-selinux docker-engine   安装需要的软件包,yum-util 提供yum-co ...

  3. go-micro框架学习1-准备工作

    下载golang环境,地址:https://studygolang.com/dl,这里使用的是1.11.10版本. 下载golang IDE,这里使用Lite,下载地址:http://liteide. ...

  4. C# redis客户端帮助类

    需要在NuGet里面引用ServiceStack.Redis using ServiceStack.Redis; using ServiceStack.Redis.Generic; using Sys ...

  5. HTTP协议复习

    HTTP请求/响应的步骤: 客户端连接到WEB服务器:浏览器与web服务器的HTTP端口建立一个TCP套接字连接,例如:http://www.baidu.com 发送HTTP请求:通过TCP套接字,客 ...

  6. Cannot find Makefile. Check your build settings.

    QT Cannot find Makefile. Check your build settings. Error while building/deploying project qt_client ...

  7. Tengine的说明

    什么是Tengine 官方帮助文档:http://tengine.taobao.org/changelog_cn.html

  8. OpenShift环境中手工模式添加etcd server

    模拟备份和恢复,在现有的集群环境,单master(etcd), infra和node上面添加另外一台机器作为etcd Server. 基于OpenShift 3.11版本,详情可以参考 https:/ ...

  9. Xcode UI界面调试神器-injectionIII

    App Store搜索injectionIII下载即可,免费的哟. 打开injectionIII,运行即可. - (BOOL)application:(UIApplication *)applicat ...

  10. vue+element-ui+ajax实现一个表格的实例

    <!DOCTYPE html> <html> <head> <script src="js/jquery-3.2.1.js">< ...