package com.intelitune.quartz;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.SimpleTrigger;
/**
* 提供对quartz.xml的各种操作功能
*/
public class XmlDomParse {
private static XmlDomParse dom4jParse = new XmlDomParse();
private static final String FILENAME = dom4jParse.getClass().getResource("/").getPath() + "quartz.xml";
/**
* 构造方法私有化
*/
private XmlDomParse() {
}
/**
* 获取XmlDom4jParse单例实例
*/
public static XmlDomParse getInstance() {
if (dom4jParse == null) {
dom4jParse = new XmlDomParse();
}
return dom4jParse;
}
/**
* 获取Document
*/
public Document getDocument() {
Document document = null;
try {
SAXReader saxReader = new SAXReader();
document = saxReader.read(new File(FILENAME)); // 读取XML文件,获得document对象
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}
/**
* 检查某个jobdetail是否存在
*/
public synchronized boolean checkJobDetail(String jobName, String jobGroup) {
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
if (job_group.getText().equals(jobGroup)) {
return true;
}
}
}
}
}
}
return false;
}
/**
* 检查某个trigger是否存在
*/
public synchronized boolean checkTrigger(String triggerName, String triggerGroup) {
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-name") && fourNode.getText().equals(triggerName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("trigger-group");
if (job_group.getText().equals(triggerGroup)) {
return true;
}
}
}
}
}
}
return false;
}
/**
* 当作业执行之后,更新触发器trigger的数据
*/
public synchronized boolean updateTrigger(JobExecutionContext jct) {
Logger log = Logger.getLogger(jct.getJobDetail().getJobClass());
log.info("当前正在执行的作业是 " + jct.getJobDetail().getFullName() + " " + DateString.date2String(new Date()));
JobDetail jobDetail = jct.getJobDetail();
SimpleTrigger trigger = (SimpleTrigger) jct.getTrigger();
JobDetailBean jobDetailBean = dom4jParse.getJobDetailBean(jobDetail.getName(), jobDetail.getGroup());
TriggerBean triggerBean = dom4jParse.getTriggerBeanByjob(jobDetail.getName(), jobDetail.getGroup());
triggerBean.setSuccessTriggered((Long.parseLong(triggerBean.getSuccessTriggered()) + 1) + "");
triggerBean.setNextFireTime(DateString.date2String(trigger.getNextFireTime()));
triggerBean.setPreviousFireTime(DateString.date2String(trigger.getPreviousFireTime()));
return dom4jParse.updateJob(jobDetailBean, triggerBean);
}
/**
* 查找所有的job
*/
public synchronized List<JobAndSimpleTrigger> getJobAndSimpleTriggers() {
List<JobAndSimpleTrigger> jastList = new ArrayList<JobAndSimpleTrigger>();
JobDetailBean jobDetailBean = new JobDetailBean();
TriggerBean triggerBean = new TriggerBean();
boolean detailFlag = false;
boolean triggerFlag = false;
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
//得到所有的jobdetail
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name")) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
Element job_name = job_detail.element("job-name");
jobDetailBean = dom4jParse.getJobDetailBean(job_name.getText(), job_group.getText());
if(jobDetailBean!=null){
detailFlag = true;
}
// System.out.println(job_name.getName()+" --->"+job_name.getText());
// System.out.println(job_group.getName()+" --->"+job_group.getText());
}
}
}
//得到所有的trigger
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-name")) {
Element simple_trigger = fourNode.getParent();
Element trigger_name = simple_trigger.element("trigger-name");
Element trigger_group = simple_trigger.element("trigger-group");
triggerBean = dom4jParse.getTriggerBean(trigger_name.getText(), trigger_group.getText());
if(triggerBean!=null){
triggerFlag = true;
}
// System.out.println(trigger_name.getName()+" --->"+trigger_name.getText());
// System.out.println(trigger_group.getName()+" --->"+trigger_group.getText());
}
}
}
if(detailFlag&&triggerFlag){
// System.out.println("看看执行了几次");
JobAndSimpleTrigger jast = new JobAndSimpleTrigger(jobDetailBean, triggerBean);
jastList.add(jast);
detailFlag = false;
triggerFlag = false;
}
}
}
return jastList;
}
/**
* 根据条件,修改某个job节点
*/
public synchronized boolean updateJob(JobDetailBean jobDetailBean, TriggerBean triggerBean) {
if(deleteJob(jobDetailBean.getName(), jobDetailBean.getGroup())){
return createJobElement(jobDetailBean, triggerBean);
}
return false;
}
/**
* 根据条件,删除某个job节点
*/
public synchronized boolean deleteJob(String jobName, String jobGroup) {
boolean result = false;
XMLWriter writer = null;
File file = null;
try {
OutputFormat format = OutputFormat.createPrettyPrint();
file = new File(FILENAME);
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
if (job_group.getText().equals(jobGroup)) {
Element job_node = job_group.getParent().getParent();
for (Iterator m = threeNode.elementIterator(); m.hasNext();){
Element detail_trigger = (Element) m.next();
for (Iterator n = threeNode.elementIterator(); n.hasNext();){
Element last_node = (Element) n.next();
detail_trigger.remove(last_node);
}
job_node.remove(detail_trigger);
}
job_node.getParent().remove(job_node);
}
}
}
}
}
}
writer = new XMLWriter(new FileWriter(file), format);
writer.write(document);
writer.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 从xml中查找jobdetail
*/
public synchronized JobDetailBean getJobDetailBean(String jobName, String jobGroup) {
JobDetailBean jobDetailBean = new JobDetailBean();
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
if (job_group.getText().equals(jobGroup)) {
Element target = job_group.getParent();
jobDetailBean.setName(target.element("job-name").getText());
jobDetailBean.setGroup(target.element("job-group").getText());
jobDetailBean.setJobClass(target.element("job-class").getText());
jobDetailBean.setJobState(target.element("job-state").getText());
jobDetailBean.setDescription(target.element("job-description").getText());
return jobDetailBean;
}
}
}
}
}
}
return null;
}
/**
* 从xml中查找trigger
*/
public synchronized TriggerBean getTriggerBean(String triggerName, String triggerGroup) {
TriggerBean triggerBean = new TriggerBean();
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-name") && fourNode.getText().equals(triggerName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("trigger-group");
if (job_group.getText().equals(triggerGroup)) {
Element target = job_group.getParent();
triggerBean.setName(target.element("trigger-name").getText());
triggerBean.setGroup(target.element("trigger-group").getText());
triggerBean.setJobName(target.element("trigger-job-name").getText());
triggerBean.setJobGroup(target.element("trigger-job-group").getText());
triggerBean.setDescription(target.element("trigger-description").getText());
triggerBean.setStartTime(target.element("start-time").getText());
triggerBean.setEndTime(target.element("end-time").getText());
triggerBean.setNextFireTime(target.element("next-fire-time").getText());
triggerBean.setPreviousFireTime(target.element("previous-fire-time").getText());
triggerBean.setRepeatCount(target.element("repeat-count").getText());
triggerBean.setRepeatInterval(target.element("repeat-interval").getText());
triggerBean.setSuccessTriggered(target.element("success-triggered").getText());
triggerBean.setPriority(target.element("priority").getText());
return triggerBean;
}
}
}
}
}
}
return null;
}
public synchronized TriggerBean getTriggerBeanByjob(String jobName, String jobGroup) {
TriggerBean triggerBean = new TriggerBean();
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("trigger-job-group");
if (job_group.getText().equals(jobGroup)) {
Element target = job_group.getParent();
triggerBean.setName(target.element("trigger-name").getText());
triggerBean.setGroup(target.element("trigger-group").getText());
triggerBean.setJobName(target.element("trigger-job-name").getText());
triggerBean.setJobGroup(target.element("trigger-job-group").getText());
triggerBean.setDescription(target.element("trigger-description").getText());
triggerBean.setStartTime(target.element("start-time").getText());
triggerBean.setEndTime(target.element("end-time").getText());
triggerBean.setNextFireTime(target.element("next-fire-time").getText());
triggerBean.setPreviousFireTime(target.element("previous-fire-time").getText());
triggerBean.setRepeatCount(target.element("repeat-count").getText());
triggerBean.setRepeatInterval(target.element("repeat-interval").getText());
triggerBean.setSuccessTriggered(target.element("success-triggered").getText());
triggerBean.setPriority(target.element("priority").getText());
return triggerBean;
}
}
}
}
}
}
return null;
}
/**
* 将job和trigger的数据持久化保存
*/
public synchronized boolean createJobElement(JobDetailBean jobDetailBean, TriggerBean triggerBean) {
boolean result = false;
XMLWriter writer = null;
File file = null;
try {
OutputFormat format = OutputFormat.createPrettyPrint();
file = new File(FILENAME);
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
// 二级节点
Element job = quartz.addElement("job");
// 三级节点
Element jobDetail = job.addElement("job-detail");
// 四级节点
Element jobDetail_name = jobDetail.addElement("job-name");
jobDetail_name.setText(StringUtils.isEmpty(jobDetailBean.getName()) ? "" : jobDetailBean.getName());
Element jobDetail_group = jobDetail.addElement("job-group");
jobDetail_group.setText(StringUtils.isEmpty(jobDetailBean.getGroup()) ? "" : jobDetailBean.getGroup());
Element jobDetail_class = jobDetail.addElement("job-class");
jobDetail_class.setText(StringUtils.isEmpty(jobDetailBean.getJobClass()) ? "" : jobDetailBean.getJobClass());
Element jobDetail_state = jobDetail.addElement("job-state");
jobDetail_state.setText(StringUtils.isEmpty(jobDetailBean.getJobState()) ? "" : jobDetailBean.getJobState());
Element jobDetail_description = jobDetail.addElement("job-description");
jobDetail_description.setText(StringUtils.isEmpty(jobDetailBean.getDescription()) ? "" : jobDetailBean.getDescription());
// 三级节点
Element simpleTrigger = job.addElement("simple-trigger");
// 四级节点
Element trigger_name = simpleTrigger.addElement("trigger-name");
trigger_name.setText(StringUtils.isEmpty(triggerBean.getName()) ? "" : triggerBean.getName());
Element trigger_group = simpleTrigger.addElement("trigger-group");
trigger_group.setText(StringUtils.isEmpty(triggerBean.getGroup()) ? "" : triggerBean.getGroup());
Element trigger_job_name = simpleTrigger.addElement("trigger-job-name");
trigger_job_name.setText(StringUtils.isEmpty(triggerBean.getJobName()) ? "" : triggerBean.getJobName());
Element trigger_job_group = simpleTrigger.addElement("trigger-job-group");
trigger_job_group.setText(StringUtils.isEmpty(triggerBean.getJobGroup()) ? "" : triggerBean.getJobGroup());
Element trigger_description = simpleTrigger.addElement("trigger-description");
trigger_description.setText(StringUtils.isEmpty(triggerBean.getDescription()) ? "" : triggerBean.getDescription());
// start-time
Element start_time = simpleTrigger.addElement("start-time");
start_time.setText(StringUtils.isEmpty(triggerBean.getStartTime()) ? "" : triggerBean.getStartTime());
// end-time
Element end_time = simpleTrigger.addElement("end-time");
end_time.setText(StringUtils.isEmpty(triggerBean.getEndTime()) ? "" : triggerBean.getEndTime());
// next-fire-time
Element next_fire_time = simpleTrigger.addElement("next-fire-time");
next_fire_time.setText(StringUtils.isEmpty(triggerBean.getNextFireTime()) ? "" : triggerBean.getNextFireTime());
// previous-fire-time
Element previous_fire_time = simpleTrigger.addElement("previous-fire-time");
previous_fire_time.setText(StringUtils.isEmpty(triggerBean.getPreviousFireTime()) ? "" : triggerBean.getPreviousFireTime());
// repeat-count
Element repeat_count = simpleTrigger.addElement("repeat-count");
repeat_count.setText(StringUtils.isEmpty(triggerBean.getRepeatCount()) ? "" : triggerBean.getRepeatCount());
// repeat-interval
Element repeat_interval = simpleTrigger.addElement("repeat-interval");
repeat_interval.setText(StringUtils.isEmpty(triggerBean.getRepeatInterval()) ? "" : triggerBean.getRepeatInterval());
// success-triggered
Element success_triggered = simpleTrigger.addElement("success-triggered");
success_triggered.setText(StringUtils.isEmpty(triggerBean.getSuccessTriggered()) ? "" : triggerBean.getSuccessTriggered());
// priority
Element priority = simpleTrigger.addElement("priority");
priority.setText(StringUtils.isEmpty(triggerBean.getPriority()) ? "" : triggerBean.getPriority());
writer = new XMLWriter(new FileWriter(file), format);
writer.write(document);
writer.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.SimpleTrigger;
/**
* 提供对quartz.xml的各种操作功能
*/
public class XmlDomParse {
private static XmlDomParse dom4jParse = new XmlDomParse();
private static final String FILENAME = dom4jParse.getClass().getResource("/").getPath() + "quartz.xml";
/**
* 构造方法私有化
*/
private XmlDomParse() {
}
/**
* 获取XmlDom4jParse单例实例
*/
public static XmlDomParse getInstance() {
if (dom4jParse == null) {
dom4jParse = new XmlDomParse();
}
return dom4jParse;
}
/**
* 获取Document
*/
public Document getDocument() {
Document document = null;
try {
SAXReader saxReader = new SAXReader();
document = saxReader.read(new File(FILENAME)); // 读取XML文件,获得document对象
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}
/**
* 检查某个jobdetail是否存在
*/
public synchronized boolean checkJobDetail(String jobName, String jobGroup) {
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
if (job_group.getText().equals(jobGroup)) {
return true;
}
}
}
}
}
}
return false;
}
/**
* 检查某个trigger是否存在
*/
public synchronized boolean checkTrigger(String triggerName, String triggerGroup) {
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-name") && fourNode.getText().equals(triggerName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("trigger-group");
if (job_group.getText().equals(triggerGroup)) {
return true;
}
}
}
}
}
}
return false;
}
/**
* 当作业执行之后,更新触发器trigger的数据
*/
public synchronized boolean updateTrigger(JobExecutionContext jct) {
Logger log = Logger.getLogger(jct.getJobDetail().getJobClass());
log.info("当前正在执行的作业是 " + jct.getJobDetail().getFullName() + " " + DateString.date2String(new Date()));
JobDetail jobDetail = jct.getJobDetail();
SimpleTrigger trigger = (SimpleTrigger) jct.getTrigger();
JobDetailBean jobDetailBean = dom4jParse.getJobDetailBean(jobDetail.getName(), jobDetail.getGroup());
TriggerBean triggerBean = dom4jParse.getTriggerBeanByjob(jobDetail.getName(), jobDetail.getGroup());
triggerBean.setSuccessTriggered((Long.parseLong(triggerBean.getSuccessTriggered()) + 1) + "");
triggerBean.setNextFireTime(DateString.date2String(trigger.getNextFireTime()));
triggerBean.setPreviousFireTime(DateString.date2String(trigger.getPreviousFireTime()));
return dom4jParse.updateJob(jobDetailBean, triggerBean);
}
/**
* 查找所有的job
*/
public synchronized List<JobAndSimpleTrigger> getJobAndSimpleTriggers() {
List<JobAndSimpleTrigger> jastList = new ArrayList<JobAndSimpleTrigger>();
JobDetailBean jobDetailBean = new JobDetailBean();
TriggerBean triggerBean = new TriggerBean();
boolean detailFlag = false;
boolean triggerFlag = false;
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
//得到所有的jobdetail
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name")) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
Element job_name = job_detail.element("job-name");
jobDetailBean = dom4jParse.getJobDetailBean(job_name.getText(), job_group.getText());
if(jobDetailBean!=null){
detailFlag = true;
}
// System.out.println(job_name.getName()+" --->"+job_name.getText());
// System.out.println(job_group.getName()+" --->"+job_group.getText());
}
}
}
//得到所有的trigger
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-name")) {
Element simple_trigger = fourNode.getParent();
Element trigger_name = simple_trigger.element("trigger-name");
Element trigger_group = simple_trigger.element("trigger-group");
triggerBean = dom4jParse.getTriggerBean(trigger_name.getText(), trigger_group.getText());
if(triggerBean!=null){
triggerFlag = true;
}
// System.out.println(trigger_name.getName()+" --->"+trigger_name.getText());
// System.out.println(trigger_group.getName()+" --->"+trigger_group.getText());
}
}
}
if(detailFlag&&triggerFlag){
// System.out.println("看看执行了几次");
JobAndSimpleTrigger jast = new JobAndSimpleTrigger(jobDetailBean, triggerBean);
jastList.add(jast);
detailFlag = false;
triggerFlag = false;
}
}
}
return jastList;
}
/**
* 根据条件,修改某个job节点
*/
public synchronized boolean updateJob(JobDetailBean jobDetailBean, TriggerBean triggerBean) {
if(deleteJob(jobDetailBean.getName(), jobDetailBean.getGroup())){
return createJobElement(jobDetailBean, triggerBean);
}
return false;
}
/**
* 根据条件,删除某个job节点
*/
public synchronized boolean deleteJob(String jobName, String jobGroup) {
boolean result = false;
XMLWriter writer = null;
File file = null;
try {
OutputFormat format = OutputFormat.createPrettyPrint();
file = new File(FILENAME);
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
if (job_group.getText().equals(jobGroup)) {
Element job_node = job_group.getParent().getParent();
for (Iterator m = threeNode.elementIterator(); m.hasNext();){
Element detail_trigger = (Element) m.next();
for (Iterator n = threeNode.elementIterator(); n.hasNext();){
Element last_node = (Element) n.next();
detail_trigger.remove(last_node);
}
job_node.remove(detail_trigger);
}
job_node.getParent().remove(job_node);
}
}
}
}
}
}
writer = new XMLWriter(new FileWriter(file), format);
writer.write(document);
writer.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 从xml中查找jobdetail
*/
public synchronized JobDetailBean getJobDetailBean(String jobName, String jobGroup) {
JobDetailBean jobDetailBean = new JobDetailBean();
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("job-detail")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("job-group");
if (job_group.getText().equals(jobGroup)) {
Element target = job_group.getParent();
jobDetailBean.setName(target.element("job-name").getText());
jobDetailBean.setGroup(target.element("job-group").getText());
jobDetailBean.setJobClass(target.element("job-class").getText());
jobDetailBean.setJobState(target.element("job-state").getText());
jobDetailBean.setDescription(target.element("job-description").getText());
return jobDetailBean;
}
}
}
}
}
}
return null;
}
/**
* 从xml中查找trigger
*/
public synchronized TriggerBean getTriggerBean(String triggerName, String triggerGroup) {
TriggerBean triggerBean = new TriggerBean();
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-name") && fourNode.getText().equals(triggerName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("trigger-group");
if (job_group.getText().equals(triggerGroup)) {
Element target = job_group.getParent();
triggerBean.setName(target.element("trigger-name").getText());
triggerBean.setGroup(target.element("trigger-group").getText());
triggerBean.setJobName(target.element("trigger-job-name").getText());
triggerBean.setJobGroup(target.element("trigger-job-group").getText());
triggerBean.setDescription(target.element("trigger-description").getText());
triggerBean.setStartTime(target.element("start-time").getText());
triggerBean.setEndTime(target.element("end-time").getText());
triggerBean.setNextFireTime(target.element("next-fire-time").getText());
triggerBean.setPreviousFireTime(target.element("previous-fire-time").getText());
triggerBean.setRepeatCount(target.element("repeat-count").getText());
triggerBean.setRepeatInterval(target.element("repeat-interval").getText());
triggerBean.setSuccessTriggered(target.element("success-triggered").getText());
triggerBean.setPriority(target.element("priority").getText());
return triggerBean;
}
}
}
}
}
}
return null;
}
public synchronized TriggerBean getTriggerBeanByjob(String jobName, String jobGroup) {
TriggerBean triggerBean = new TriggerBean();
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
for (Iterator i = quartz.elementIterator(); i.hasNext();) {
Element job = (Element) i.next();
for (Iterator j = job.elementIterator(); j.hasNext();) {
Element threeNode = (Element) j.next();
if (threeNode.getName().equals("simple-trigger")) {
for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
Element fourNode = (Element) k.next();
if (fourNode.getName().equals("trigger-job-name") && fourNode.getText().equals(jobName)) {
Element job_detail = fourNode.getParent();
Element job_group = job_detail.element("trigger-job-group");
if (job_group.getText().equals(jobGroup)) {
Element target = job_group.getParent();
triggerBean.setName(target.element("trigger-name").getText());
triggerBean.setGroup(target.element("trigger-group").getText());
triggerBean.setJobName(target.element("trigger-job-name").getText());
triggerBean.setJobGroup(target.element("trigger-job-group").getText());
triggerBean.setDescription(target.element("trigger-description").getText());
triggerBean.setStartTime(target.element("start-time").getText());
triggerBean.setEndTime(target.element("end-time").getText());
triggerBean.setNextFireTime(target.element("next-fire-time").getText());
triggerBean.setPreviousFireTime(target.element("previous-fire-time").getText());
triggerBean.setRepeatCount(target.element("repeat-count").getText());
triggerBean.setRepeatInterval(target.element("repeat-interval").getText());
triggerBean.setSuccessTriggered(target.element("success-triggered").getText());
triggerBean.setPriority(target.element("priority").getText());
return triggerBean;
}
}
}
}
}
}
return null;
}
/**
* 将job和trigger的数据持久化保存
*/
public synchronized boolean createJobElement(JobDetailBean jobDetailBean, TriggerBean triggerBean) {
boolean result = false;
XMLWriter writer = null;
File file = null;
try {
OutputFormat format = OutputFormat.createPrettyPrint();
file = new File(FILENAME);
Document document = dom4jParse.getDocument();
Element quartz = document.getRootElement(); // 获取根节点
// 二级节点
Element job = quartz.addElement("job");
// 三级节点
Element jobDetail = job.addElement("job-detail");
// 四级节点
Element jobDetail_name = jobDetail.addElement("job-name");
jobDetail_name.setText(StringUtils.isEmpty(jobDetailBean.getName()) ? "" : jobDetailBean.getName());
Element jobDetail_group = jobDetail.addElement("job-group");
jobDetail_group.setText(StringUtils.isEmpty(jobDetailBean.getGroup()) ? "" : jobDetailBean.getGroup());
Element jobDetail_class = jobDetail.addElement("job-class");
jobDetail_class.setText(StringUtils.isEmpty(jobDetailBean.getJobClass()) ? "" : jobDetailBean.getJobClass());
Element jobDetail_state = jobDetail.addElement("job-state");
jobDetail_state.setText(StringUtils.isEmpty(jobDetailBean.getJobState()) ? "" : jobDetailBean.getJobState());
Element jobDetail_description = jobDetail.addElement("job-description");
jobDetail_description.setText(StringUtils.isEmpty(jobDetailBean.getDescription()) ? "" : jobDetailBean.getDescription());
// 三级节点
Element simpleTrigger = job.addElement("simple-trigger");
// 四级节点
Element trigger_name = simpleTrigger.addElement("trigger-name");
trigger_name.setText(StringUtils.isEmpty(triggerBean.getName()) ? "" : triggerBean.getName());
Element trigger_group = simpleTrigger.addElement("trigger-group");
trigger_group.setText(StringUtils.isEmpty(triggerBean.getGroup()) ? "" : triggerBean.getGroup());
Element trigger_job_name = simpleTrigger.addElement("trigger-job-name");
trigger_job_name.setText(StringUtils.isEmpty(triggerBean.getJobName()) ? "" : triggerBean.getJobName());
Element trigger_job_group = simpleTrigger.addElement("trigger-job-group");
trigger_job_group.setText(StringUtils.isEmpty(triggerBean.getJobGroup()) ? "" : triggerBean.getJobGroup());
Element trigger_description = simpleTrigger.addElement("trigger-description");
trigger_description.setText(StringUtils.isEmpty(triggerBean.getDescription()) ? "" : triggerBean.getDescription());
// start-time
Element start_time = simpleTrigger.addElement("start-time");
start_time.setText(StringUtils.isEmpty(triggerBean.getStartTime()) ? "" : triggerBean.getStartTime());
// end-time
Element end_time = simpleTrigger.addElement("end-time");
end_time.setText(StringUtils.isEmpty(triggerBean.getEndTime()) ? "" : triggerBean.getEndTime());
// next-fire-time
Element next_fire_time = simpleTrigger.addElement("next-fire-time");
next_fire_time.setText(StringUtils.isEmpty(triggerBean.getNextFireTime()) ? "" : triggerBean.getNextFireTime());
// previous-fire-time
Element previous_fire_time = simpleTrigger.addElement("previous-fire-time");
previous_fire_time.setText(StringUtils.isEmpty(triggerBean.getPreviousFireTime()) ? "" : triggerBean.getPreviousFireTime());
// repeat-count
Element repeat_count = simpleTrigger.addElement("repeat-count");
repeat_count.setText(StringUtils.isEmpty(triggerBean.getRepeatCount()) ? "" : triggerBean.getRepeatCount());
// repeat-interval
Element repeat_interval = simpleTrigger.addElement("repeat-interval");
repeat_interval.setText(StringUtils.isEmpty(triggerBean.getRepeatInterval()) ? "" : triggerBean.getRepeatInterval());
// success-triggered
Element success_triggered = simpleTrigger.addElement("success-triggered");
success_triggered.setText(StringUtils.isEmpty(triggerBean.getSuccessTriggered()) ? "" : triggerBean.getSuccessTriggered());
// priority
Element priority = simpleTrigger.addElement("priority");
priority.setText(StringUtils.isEmpty(triggerBean.getPriority()) ? "" : triggerBean.getPriority());
writer = new XMLWriter(new FileWriter(file), format);
writer.write(document);
writer.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
}