package com.cn.demo2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.xml.sax.InputSource;
/**
* 定时任务调度器
*
*/
public class SchedulerUtil {
/**任务调度器*/
private static Scheduler scheduler;
/**任务名与任务组的映射*/
private static HashMap<String,String> rels;
/**全部启动*/
public static void startAll()throws Exception{
initScheduler(true);
scheduler.start();
}
/**
* Get the scheduler value
*/
public static Scheduler getScheduler() {
return scheduler;
}
/**
* 被触发调度
*
* */
public static boolean startByTrigger(String taskName, Map params) throws Exception{
boolean boo = true;
if(scheduler==null){
initScheduler(true);
scheduler.start();
}
String groupName= rels.get(taskName);
if(StringUtils.isNotEmpty(groupName)){
JobDetail detail = scheduler.getJobDetail(taskName,groupName);
JobDataMap map = detail.getJobDataMap();
map.put("params", params);
scheduler.triggerJob(taskName,groupName,map); //要把参数带入,必须在此处传第3个参数
//map.remove("params"); //没必要删,参数不会影响原来的定时计划,只会作用于本次触发
System.out.println("任务:"+taskName+" 被触发调度成功!");
}else{
boo=false;
System.out.println("任务:"+taskName+"不存在或未激活, 不可被触发调度!");
}
return boo;
}
/**初始化调度器*/
private static void initScheduler(boolean isPrintLog) throws Exception{
String path=System.getProperty("user.dir")+File.separator
+"conf" + File.separator+"quartzConfig.properties";
scheduler = new StdSchedulerFactory(path).getScheduler();
System.out.println("使用quartzConfig.properties初始化queartz!!!");
rels = new HashMap<String, String>();
//定时任务集合
List<TaskBeen> tasks = getTaskBean();
int i = 1;
for(TaskBeen task : tasks){
List<String> taskClass = task.getTaskClass();
String triggerTime = task.getTriggerTime();
for(String taskName : taskClass){
createJob(i, taskName, triggerTime, isPrintLog);
}
i++;
}
//触发启动时需要立即跑一次的任务
for(TaskBeen task : tasks){
Set<String> runOnStartTask = task.getRunOnStartTask();
for(String taskName : runOnStartTask){
Map params = new HashMap();
params.put("runOnStart", "1");
startByTrigger(taskName, params);
}
}
}
/**创建1个任务*/
private static void createJob(int i, String taskName, String triggerTime, boolean isPrintLog){
try {
String groupName = "group" + i;
taskName = taskName.trim();
JobDetail jobDetail = new JobDetail(taskName, groupName, Class.forName(taskName));
CronTrigger cronTrgger = new CronTrigger(taskName, groupName, triggerTime);
scheduler.scheduleJob(jobDetail, cronTrgger);
rels.put(taskName, groupName);
if(isPrintLog){System.out.println("启动任务:"+taskName+", 执行时机:"+triggerTime);}
} catch (Exception e) {
System.out.println("任务启动失败:"+taskName+":"+triggerTime);
System.out.println(e);
}
}
/**得到task-bean*/
public static List<TaskBeen> getTaskBean() throws Exception{
List<TaskBeen> beans = new ArrayList<TaskBeen>();
String path = System.getProperty("user.dir")+File.separator+"conf" + File.separator+"taskConfig.xml";
Document doc = getDocByPath(path);
Element rootElem = doc.getRootElement();
List<Element> tasks = rootElem.getChildren("task");
for(Element task : tasks){
String triggerTime = task.getChildText("triggerTime");
List<Element> taskBeens = task.getChild("taskBeen").getChildren("value");
List<String> beenList = new ArrayList<String>();
Set<String> runOnStartSet = new HashSet<String>();
for(Element taskBeenName : taskBeens){
String activate = taskBeenName.getAttributeValue("isActivate");
//如果没有激活,则不加入到集合中
if(!"1".equals(activate)){
continue;
}
String beenName = taskBeenName.getText().toString();
beenList.add(beenName);
String runOnStart = taskBeenName.getAttributeValue("runOnStart");
if("1".equals(runOnStart)){
runOnStartSet.add(beenName);
}
}
TaskBeen taskBeen = new TaskBeen();
taskBeen.setTaskClass(beenList);
taskBeen.setTriggerTime(triggerTime);
taskBeen.setRunOnStartTask(runOnStartSet);
beans.add(taskBeen);
}
return beans;
}
public static Document getDocByPath(String filePath) throws Exception{
File file = new File(filePath);
InputStream in = new FileInputStream(file);
StringBuffer readStr = new StringBuffer();
byte buf[] = new byte[1024];
int readLen = 0;
while ((readLen = in.read(buf, 0, 1024)) != -1) {
readStr.append(new String(buf, 0, readLen, "utf-8"));
}
if (in != null){
in.close();
}
String xmlStr = readStr.toString();
StringReader read = new StringReader(xmlStr);
InputSource source = new InputSource(read);
SAXBuilder sb = new SAXBuilder();
Document doc = null;
doc = sb.build(source);
return doc;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
quartz_demo集合
共83个文件
jar:31个
class:13个
java:13个
5星 · 超过95%的资源 需积分: 10 13 下载量 135 浏览量
2017-08-25
15:23:02
上传
评论
收藏 10.85MB ZIP 举报
温馨提示
自己整理个一个quartz_demo集合,demo含CronTrigger方式、SimpleTrigger方式、spring集成CronTrigger方式、spring集成SimpleTrigger方式以及有状态作业方式。
资源推荐
资源详情
资源评论
收起资源包目录
quartz_demo集合.zip (83个子文件)
quartz_demo集合
spring_quartz_demo2
.project 395B
src
applicationContext.xml 1KB
quartz.properties 940B
com
cn
quartz
task
Test.java 261B
MyJob.java 396B
lib
spring-context-4.0.2.RELEASE.jar 951KB
spring-jdbc-4.0.2.RELEASE.jar 410KB
spring-integration-file-2.2.0.RELEASE.jar 100KB
quartz-all-2.0.2.jar 536KB
spring-core-4.0.2.RELEASE.jar 938KB
spring-retry-1.0.2.RELEASE.jar 78KB
spring-batch-core-2.2.0.RELEASE.jar 539KB
spring-integration-core-2.2.0.RELEASE.jar 648KB
slf4j-api-1.6.0.jar 25KB
spring-context-support-4.0.2.RELEASE.jar 132KB
commons-logging-1.1.3.jar 61KB
spring-expression-4.0.2.RELEASE.jar 200KB
spring-integration-ftp-2.2.0.RELEASE.jar 27KB
spring-aop-4.0.2.RELEASE.jar 344KB
spring-tx-4.0.2.RELEASE.jar 242KB
spring-web-4.0.2.RELEASE.jar 649KB
jta-1.1.jar 13KB
spring-batch-infrastructure-2.2.0.RELEASE.jar 344KB
commons-collections-3.2.1.jar 562KB
spring-beans-4.0.2.RELEASE.jar 653KB
spring-orm-4.0.2.RELEASE.jar 358KB
spring-jms-4.0.2.RELEASE.jar 206KB
.settings
org.eclipse.jdt.core.prefs 598B
org.eclipse.core.resources.prefs 82B
.classpath 2KB
bin
applicationContext.xml 1KB
quartz.properties 940B
com
cn
quartz
task
Test.class 539B
MyJob.class 885B
spring_quartz_demo1
.project 779B
src
test
java
main
resources
spring
spring-quartz.xml 2KB
java
com
cn
quartz
task
TestApp.java 287B
MyTask.java 191B
MyJob.java 649B
target
classes
com
cn
quartz
task
TestApp.class 568B
MyTask.class 817B
MyJob.class 1KB
META-INF
MANIFEST.MF 114B
maven
com.stephen
springQuartz
pom.properties 240B
pom.xml 2KB
spring
spring-quartz.xml 2KB
springQuartz-0.0.1-SNAPSHOT.jar 6KB
maven-archiver
pom.properties 122B
test-classes
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 243B
org.eclipse.core.resources.prefs 155B
pom.xml 2KB
.classpath 1KB
quartz_demo
conf
quartzConfig.properties 1KB
taskConfig.xml 219B
.project 387B
src
com
cn
demo2
SchedulerUtil.java 5KB
Task2.java 371B
StartTask2.java 236B
TaskBeen.java 847B
demo1
Task1.java 367B
StartTask1.java 2KB
demo3
StartTask3.java 942B
Task3.java 495B
lib
commons-collections-3.2.jar 558KB
spring.jar 2.81MB
commons-lang-1.0.1.jar 62KB
log4j-1.2.12.jar 355KB
quartz-1.6.6.jar 421KB
commons-logging-1.2.jar 60KB
jta.jar 9KB
jdom-1.1.jar 150KB
.settings
org.eclipse.jdt.core.prefs 598B
org.eclipse.core.resources.prefs 125B
.classpath 778B
bin
com
cn
demo2
StartTask2.class 507B
TaskBeen.class 1KB
SchedulerUtil.class 8KB
Task2.class 685B
demo1
StartTask1.class 2KB
Task1.class 685B
demo3
StartTask3.class 1KB
Task3.class 812B
共 83 条
- 1
资源评论
- 输出乃最高级学习方式2018-09-14我只想说代码可用,最原生版本的,不是maven版本的,赞一个
- 尘里V2018-06-11多种执行定时器,没有搭建到服务。大致了解了定时器。很不错的代码。
丶Seven
- 粉丝: 26
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功