002-使用java类调用quartz
一、工具类
package com.tech.jin.jobScheduler; import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties; import org.apache.log4j.Logger;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory; public class JobUtil { private static Logger logger = Logger.getLogger(JobUtil.class);
private static StdSchedulerFactory schedulerFactory = null; private JobUtil(){} /**
* 调度器factory
* @return
*/
private static synchronized SchedulerFactory getSchedulerFactory(){
if(schedulerFactory==null){ schedulerFactory = new StdSchedulerFactory(); Properties p = new Properties();
p.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
p.put("org.quartz.threadPool.threadCount", "10"); try {
schedulerFactory.initialize(p);
} catch (SchedulerException e) {
logger.info(e);
}
}
return schedulerFactory;
} /**
* 添加任务
* @param job 要调用的job类
* @param jobName job名称
* @param cronExpression 任务触发时间表达式
* @param param 需要用到的参数,可在job类中的context获得
*/
public static void addJob(Job job,String jobName,String cronExpression,Map param){
Scheduler scheduler = null;
try { removeJob(jobName, job.getClass().getCanonicalName()+"Group");//删除原任务 scheduler = getSchedulerFactory().getScheduler(); JobDetail jobDetail = getJobDetail(job, jobName,param);
String jobGroup = jobDetail.getGroup();
CronTrigger cronTrigger = getCronTrigger(job, jobName,jobGroup, cronExpression); scheduler.scheduleJob(jobDetail, cronTrigger); logger.info("添加任务:"+jobName); startScheduler(); } catch (SchedulerException e) {
logger.error(e);
} } /**
* 对外停止任务调度器方法
*/
public static void stopJob(){
shutdownScheduler();
} /**
* 启动调度器
*/
protected static void startScheduler(){
Scheduler scheduler = null;
try {
scheduler = getSchedulerFactory().getScheduler();
//如果调度器未启动,启动调度器
if(scheduler!=null&&!scheduler.isStarted()){
scheduler.start();
}
} catch (SchedulerException e) {
logger.error(e);
}
} /**
* 关闭调度器,关闭后任务也都清除
*/
protected static void shutdownScheduler(){
Scheduler scheduler = null;
try {
scheduler = getSchedulerFactory().getScheduler();
//如果调度器未关闭,关闭调度器
if(scheduler!=null&&!scheduler.isShutdown()){
scheduler.shutdown();
}
} catch (SchedulerException e) {
logger.error(e);
}
} /**
* 获取JobDetail
* @param job
* @param param
* @return
*/
protected static JobDetail getJobDetail(Job job,String jobName,Map param){
Class jobClazz = job.getClass();
if(jobName==null||"".equals(jobName)){
jobName = jobClazz.getCanonicalName();
}
String jobGroup = jobClazz.getCanonicalName()+"Group"; JobDetail jobDetail = new JobDetail();
jobDetail.setDurability(true);
jobDetail.setRequestsRecovery(true);
jobDetail.setName(jobName);
jobDetail.setGroup(jobGroup);
jobDetail.setJobClass(jobClazz); if(param!=null&¶m.size()>0){
JobDataMap jobDataMap = new JobDataMap(param);//存放参数
jobDetail.setJobDataMap(jobDataMap); logger.info("任务 "+jobName+" jobDetail存放的参数:"+param);
} return jobDetail;
} /**
* 获取触发器
* @param job
* @param jobName
* @param cronExpression
* @return
*/
protected static CronTrigger getCronTrigger(Job job,String jobName,String jobGroup,String cronExpression){
Class jobClazz = job.getClass();
String triggerName = jobClazz.getCanonicalName()+"Trigger";
String triggerGroup = jobClazz.getCanonicalName()+"TriggerGroup"; CronTrigger cronTrigger = new CronTrigger();
cronTrigger.setName(triggerName);
cronTrigger.setGroup(triggerGroup);
cronTrigger.setJobName(jobName);
cronTrigger.setJobGroup(jobGroup);
try {
cronTrigger.setCronExpression(cronExpression);//触发任务的时间表达式
} catch (ParseException e) {
logger.error(e);
} logger.info("任务 "+jobName+" 触发时间:"+cronExpression); return cronTrigger;
} /**
* 删除job
* @param jobName
* @param jobGroup
*/
public static void removeJob(String jobName,String jobGroup){ logger.info("删除任务:jobName:"+jobName +" jobGroup:"+jobGroup); Scheduler scheduler = null;
String[] jobNames = null;
try {
scheduler = getSchedulerFactory().getScheduler();
jobNames = scheduler.getJobNames(jobGroup);
if(jobNames==null||jobNames.length==0){
return;
}
for(String name:jobNames){
if(name.equals(jobName)){
scheduler.pauseTrigger(jobName, jobGroup);//停止触发器
scheduler.pauseJob(jobName, jobGroup);//暂停job
scheduler.unscheduleJob(jobName, jobGroup);//取消预订的job
scheduler.deleteJob(jobName, jobGroup);//删除job
}
} } catch (SchedulerException e) {
logger.error(e);
}
} /**
* 获取任务列表
* @return
*/
public static Map<String, List<String>> getJobList(){ Scheduler scheduler = null;
Map<String, List<String>> map = null;
try {
scheduler = getSchedulerFactory().getScheduler(); String[] jobGroupNames = scheduler.getJobGroupNames();
if(jobGroupNames==null||jobGroupNames.length==0){
return null;
} map = new HashMap<String, List<String>>(); for(String jobGroup :jobGroupNames){ String[] jobNames = scheduler.getJobNames(jobGroup);
if(jobNames==null||jobNames.length==0){
continue;
} List<String> jobNameList = new ArrayList<String>(); for(String jobName : jobNames){
jobNameList.add(jobName);
} map.put(jobGroup, jobNameList);
} } catch (SchedulerException e) {
logger.error(e);
} logger.info("获取job列表:"+map); return map;
} }
二、业务类
package com.tech.jin.job; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class TestJob implements Job{ @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //可以context中获取到之前存入jobDataMap中的参数
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
String value = (String)jobDataMap.get("key"); System.out.println(value); } }
三、调用
Job job = new TestJob();
Map<String, String> map = new HashMap<String, String>();
map.put("key", "hello world");
JobUtil.addJob(job, job.getClass().getName(), "0/10 * * * * ?", map);
002-使用java类调用quartz的更多相关文章
- 003-spring结合java类调用quartz
一.利弊 针对001 中设置,不方便程序中动态添加任务,只能使用配置进行配置任务, 适用于已知固定时刻需要执行的任务. 针对002中设置,不方便结合调用spring注入的实体 使用于程序内部新增添的任 ...
- oracle调用JAVA类的方法
导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加 ...
- C#调用java类、jar包方法(转)
一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中tes ...
- 规则引擎集成接口(七)规则引擎调用Java类
规则引擎调用Java类 通过myEclipse编写一个简单工程,其中方法是两数相加等到结果,既结果1=输入值1+输入值2.实现规则调用外部接口的方法有三种. 1:接口实例:在myEclipse中制作一 ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- C#调用java类、jar包方法
一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中tes ...
- C#调用Java类
C#调用Java类 (2011-01-07 14:02:05) 转载▼ 分类: Java学习 1. 在Eclipse中新建名称为hello的java project,此工程仅包含一个文件hell ...
- php调用java类文件
最近在折腾php调用java类,网上查阅资料,最终选用JavaBridge,遇到的第一个问题是java_require() 函数引入自定义java打包而成的jar文件,在新版本的JavaBridge中 ...
- kettle中调用java类
kettle中调用java类 有时须要在kettle调用java类,如:验证.查询或自己定义加密等.有时甚至连主要的数据訪问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应 ...
随机推荐
- [转]ubuntu安装gcc
Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装. 如果单独安装gcc以及g++比较麻烦,幸运的是,为了能够编译Ubuntu的内核,Ubuntu提供了一个build-esse ...
- 解决:eclipse配置Database Connections报错Communications link failure Last packet sent to the server was 0 ms ago
网上各式各样的问题,不过我的问题在于我开了Proxifier,导致链接localhost的时候被拦截...把Proxifier关了就好了 以后遇到这种问题.连不上数据库啊,连不上本地的服务器啊,先检查 ...
- APACHE支持.htaccess
需要开启.htacess功能需要以下三步: 1 2 3 4 5 6 7 8 9 1.打开httpd.conf 将Options FollowSymLinks AllowOverride None ...
- node.js安装与入门使用
一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 的包管理器 npm,是全球最大的开源库生态系统. 提供事件驱动和非阻塞I/O API,可优化应用程序的吞吐量和规 ...
- python笔记6:常用模块
模块,模块就是封装了特殊功能的代码. 模块分为三种: 自定义模块 第三方模块 内置模块 1.自定义模块 自定义模块就是自己定义的模块,如何import自定义模块,如下: (1)主程序与模块程序在同一目 ...
- ubuntu14.04安装pycurl
一. 安装依赖项 sudo apt-get install libcurl4-gnutls-dev 二. 安装pycurl pip install pycurl 三. 检验是否安装成功 进入pytho ...
- JSP页面之间传递参数的方法有哪些?
JSP页面之间传递参数的方法有哪些? 解答: 1)request 2)session 3)application 4)提交表单 5)超链接
- Windows Azure 系列-- 使用Azure + Web API实现图片上传
1. 创建1个Azure账号,登录之后创建1个AzureStorage.左下方点Manage Access会看到Primary Access Key和Storage Account,记住它们的位置,等 ...
- UE问题分部解决
0.寻找Actor ALandscape *land=nullptr; for (TActorIterator<ALandscape> It(GEditor->GetEditorWo ...
- 把登录和退出功能单独写到一个公共.py脚本,其它用例test1,test2调用公共登录,退出函数
公共登录/退出函数模块(login_exit.py): #coding:utf-8import timedef login(driver, username, password):#此处的driver ...