Quartz使用之:远程job的执行
执行 使用 远程 job quartz
2023-06-13 09:12:41 时间
大家好,又见面了,我是你们的朋友全栈君。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.cn/159218.html原文链接:https://javaforall.cn
相关文章
- Rekono-自动结合多个黑客工具执行完整的渗透测试过程
- java中finalized的用法_java 执行class
- 记一次绕过安全狗命令执行上线
- python执行测试用例_java随机函数random使用方法
- 一文了解命令执行漏洞和代码执行漏洞
- 使用Stepping.NET轻松执行多步原子操作
- Java servlet中web xml文件内容执行原理
- Java 中对象传入方法内赋值后,为何执行完方法后对象的值未改变呢?
- 【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )
- 【Kotlin 协程】协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )
- 让phpredis更快执行的方法详解数据库
- 如何在MySQL中执行除法运算?(mysql除法运算)
- 使用merge同时执行insert和update操作
- MySQL中如何使用Event定时执行任务(mysql 中event)
- 语句如何使用CMD实现MySQL语句执行(cmd怎么执行mysql)
- 如何使用C语言执行Oracle数据库的SQL脚本(c 执行oracle脚本)
- 实现高效查询MySQL一次性执行多条查询(mysql一执行多条查询)
- 处理Oracle作业的异步执行挑战与机遇(oracle作业异步)
- 如何让页面加载完成后执行js