//第一步
public static void main(String args[]) {
SchedulerManage.start();//启动定时器
}
//第二步
package com.lolaage.quartz;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.JobDetail;
import com.lolaage.common.GlobalConstValue;
import com.lolaage.entity.newdata.QuartzEntity;
public class SchedulerManage {
public static Logger logger = Logger.getLogger(SchedulerManage.class);
private static Scheduler sched = null;
public SchedulerManage(){
}
public static void addJob(QuartzEntity quartz) {
try {
@SuppressWarnings("unchecked")
JobDetail job = JobBuilder.newJob(quartz.getJob_class())
.withIdentity(quartz.getJob_name(), quartz.getJob_group())
.build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity(quartz.getJob_trigger(),
quartz.getJob_group())
.withSchedule(
CronScheduleBuilder.cronSchedule(quartz
.getCron_expression()))
.forJob(quartz.getJob_name(), quartz.getJob_group())
.build();
sched.scheduleJob(job, trigger); // 添加工作
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public ArrayList<QuartzEntity> initReadConfig() {
SAXReader reader = new SAXReader();
Document doc;
try {
doc = reader.read(GlobalConstValue.QUARTZ_XML_FILE);
Element root = doc.getRootElement();
List<Element> elements = root.selectNodes("/quartz/job");
ArrayList<QuartzEntity> quartzArray = new ArrayList<QuartzEntity>();
QuartzEntity quartz = null;
for (Element jobElement : elements) {
quartz = new QuartzEntity();
quartz.setJob_name(jobElement.elementTextTrim("job-name"));
quartz.setJob_group(jobElement.elementTextTrim("job-group"));
quartz.setJob_trigger(jobElement.elementTextTrim("job-trigger"));
quartz.setCron_expression(jobElement
.elementTextTrim("cron-expression"));
ClassLoader commonLoader = this.getClass().getClassLoader();
quartz.setJob_class(commonLoader.loadClass(jobElement
.elementTextTrim("job-class")));
quartzArray.add(quartz);
}
return quartzArray;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
public static void start() throws SchedulerException{
logger.debug("SchedulerManage start............");
sched = new StdSchedulerFactory().getScheduler();
SchedulerManage s = new SchedulerManage();
ArrayList<QuartzEntity> quartzArray = s.initReadConfig();
if (quartzArray == null)
return;
else {
for (QuartzEntity quartz : quartzArray) {
SchedulerManage.addJob(quartz);
}
sched.start();
}
}
// public static void start() {
//
// Scheduler sched;
// try {
// // sched = schedFact.getScheduler();
// sched = new StdSchedulerFactory().getScheduler();
//
// JobDetail jobDetail = JobBuilder.newJob(GetEventInfoJob.class)
// .withIdentity("GetEventInfo", "GetEventInfoGroup").build();
//
// Trigger trigger = TriggerBuilder
// .newTrigger()
// .withIdentity("GetEventInfoTrigger", "GetEventInfoGroup")
// .withSchedule(
// CronScheduleBuilder
// .cronSchedule("0 0/5 * * * ?"))
// .forJob("GetEventInfo", "GetEventInfoGroup").build();
//
// sched.scheduleJob(jobDetail, trigger); // 添加工作
//
// sched.start();
// // sched.shutdown();
//
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// }
}
//第三步
package com.lolaage.quartz;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramSocket;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.lolaage.common.GlobalConstValue;
import com.lolaage.common.MailType;
import com.lolaage.dals.distributetransaction.DistributeTransaction;
import com.lolaage.dals.sessionmanager.SessionPoint;
import com.lolaage.entity.newdata.Notice;
import com.lolaage.entity.newdata.NoticeUser;
import com.lolaage.entity.newdata.TMailBox;
import com.lolaage.entity.resBean.X101ResBean;
import com.lolaage.entity.struct.ParamStruct;
import com.lolaage.entity.struct.PublicNoticeStruct;
import com.lolaage.entity.struct.TTime;
import com.lolaage.exception.DataVersionSQLException;
import com.lolaage.factory.PostManager;
import com.lolaage.newdao.DepartmentDao;
import com.lolaage.newdao.NoticeDao;
import com.lolaage.newdao.NoticeUserDao;
import com.lolaage.newdao.UserDao;
import com.lolaage.newdao.impl.DepartmentDaoImpl;
import com.lolaage.newdao.impl.GlobalCompanyDaoImpl;
import com.lolaage.newdao.impl.NoticeDaoImpl;
import com.lolaage.newdao.impl.NoticeUserDaoImpl;
import com.lolaage.newdao.impl.UserDaoImpl;
import com.lolaage.util.CalendarUtil;
import com.lolaage.util.FrameUtil;
public class NoticeJob implements Job {
/**
* logger
*/
public static Logger logger = Logger.getLogger(NoticeJob.class);
public void execute(JobExecutionContext arg0) throws JobExecutionException {
DatagramSocket socket = (DatagramSocket) arg0.getJobDetail()
.getJobDataMap().get("socket");
ParamStruct paramStruct = new ParamStruct();
paramStruct.setSocket(socket);
//获取企业ids
SessionPoint sessionPoint=new SessionPoint().start();
DistributeTransaction distributeTransaction=new DistributeTransaction().beginDistributeTransaction();
try{
GlobalCompanyDaoImpl globalCompanyDao = new GlobalCompanyDaoImpl(GlobalConstValue.ZERO, distributeTransaction, sessionPoint);
List<Long> companyIdLst = globalCompanyDao.getAllCompanyIds();
distributeTransaction.commitDistributeTransaction();
//给每个企业发送通告
if(companyIdLst != null && companyIdLst.size() > 0 ){
for(Long companyId:companyIdLst){
paramStruct.setCompanyId(companyId);
sendNotice(paramStruct);
}
}
}catch(Exception ex){
distributeTransaction.rollbackDistributeTransaction();
logger.error(ex.getCause(), ex);
ex.printStackTrace();
}finally{
//释放连接
sessionPoint.end();
}
}
public void sendNotice(ParamStruct paramStruct){
SessionPoint sessionPoint=new SessionPoint().start();
DistributeTransaction distributeTransaction=new DistributeTransaction().beginDistributeTransaction();
NoticeDao noticeDao = new NoticeDaoImpl(paramStruct.getCompanyId(),distributeTransaction,sessionPoint);
NoticeUserDao noticeUserDao=new NoticeUserDaoImpl(paramStruct.getCompanyId(),distributeTransaction,sessionPoint);
UserDao userDao=new UserDaoImpl(paramStruct.getCompanyId(),distributeTransaction,sessionPoint);
try {
Map<Long,Notice> noticeMap=null;
List<NoticeUser> noticeUserList=noticeUserDao.getNoticeUserByStatus();
if(noticeUserList!=null && noticeUserList.size()>0){
noticeMap=new HashMap<Long,Notice>();
for(NoticeUser noticeUser:noticeUserList){
Notice notice=null;
if(noticeMap.containsKey(noticeUser.getNoticeId())){
notice=noticeMap.get(noticeUser.getNoticeId());
}else{
notice=noticeDao.getNoticeById(noticeUser.getNoticeId());
if(notice!=null){
noticeMap.put(noticeUser.getNoticeId(),notice);
}
}
if(notice!=null){
PublicNoticeStruct publicNotice = new PublicNoticeStruct();
publicNotice.setMsgId((int)notice.getId());
if(notice.getCreaterId()!=0){
try {
publicNotice.setPublisherName(userDao.getNicknameByUserId(notice.getCreaterId()));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
publicNotice.setMsgTime(notice.getSendTime());
publicNotice.setDetail(notice.getContent());
publicNotice.setTitle(notice.getTitle());
//X101对象
X101ResBean resBean = new X101ResBean();
resBean.setPublicNotice(publicNotice);
TMailBox mail = FrameUtil.generateMail(paramStruct.getCompanyId(),noticeUser.getUserId(), "X", 101,
(byte)MailType.MAIL_TYPE_NORMAL, resBean.toByteArray());
PostManager.postMail(mail, paramStruct);
noticeUserDao.updateStatus(noticeUser.getId(),1);
}
}
}
//commitDistributeTransaction
distributeTransaction.commitDistributeTransaction();
} catch (SQLException e1) {
distributeTransaction.rollbackDistributeTransaction();
e1.printStackTrace();
}
catch (UnsupportedEncodingException e) {
distributeTransaction.rollbackDistributeTransaction();
e.printStackTrace();
} catch (DataVersionSQLException e) {
distributeTransaction.rollbackDistributeTransaction();
e.printStackTrace();
} catch (IOException e) {
distributeTransaction.rollbackDistributeTransaction();
e.printStackTrace();
} finally {
sessionPoint.end();
}
}
}
//第四步(Quartz.xml)
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<job>
<job-name>GetEventInfo</job-name>
<job-group>GetEventInfoGroup</job-group>
<job-trigger>GetEventInfoTrigger</job-trigger>
<cron-expression>0 0/100 * * * ?</cron-expression>
<job-class>com.lolaage.quartz.GetEventInfoJob</job-class>
</job>
<job>
<job-name>SendPublicNotice</job-name>
<job-group>PublicNoticeGroup</job-group>
<job-trigger>SendPublicNoticeTrigger</job-trigger>
<cron-expression>0 0/100 * * * ?</cron-expression>
<job-class>com.lolaage.quartz.NoticeJob</job-class>
</job>
</quartz>
分享到:
相关推荐
Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它提供了丰富的API和灵活性,使得开发者可以方便地定义、安排和管理各种任务。版本1.8.6是Quartz的一个稳定版本,它包含了对数据库...
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息...
Quartz 是一个开源的作业调度框架,广泛应用于Java企业级应用中,用于自动化任务执行,如定时触发工作流、发送邮件、数据同步等。在Quartz的部署和配置过程中,为了存储作业和触发器的信息,我们需要在关系型数据库...
### 深入解读Quartz的原理 #### 一、Quartz概述 Quartz 是一个功能强大且易于使用的 Java 开源定时任务调度器。它能够触发在指定的时间执行任务(通常称为作业)。Quartz 能够满足从简单的到非常复杂的业务场景...
赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...
**Android Studio下的Quartz工程详解** Quartz是一个开源的作业调度框架,广泛应用于Java环境中的任务调度。在Android Studio中使用Quartz,可以为应用程序添加定时执行的任务功能,例如定期发送通知、更新数据或者...
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它允许开发者灵活地定义作业和触发器,实现复杂的时间调度。在2.3.0这个版本中,Quartz 提供了针对不同数据库系统的初始化脚本,...
quartz scheduler 入门教程 Quartz Scheduler 是一种功能丰富、开源的任务调度程序库,可以在任何 Java 程序中使用。它可以用来创建简单或者复杂的执行次数可以达成千上万的任务。任务可以是任何 Java 可以做的事情...
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
Quartz.NET是一款强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。这个"Quartz.net-定时任务 Demo"示例将展示如何利用Quartz.NET来安排代码在指定时间后执行,比如几十分钟后的场景。 Quartz.NET的...
Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它支持持久化任务和触发器到数据库,确保即使在系统重启后也能恢复先前的任务安排。本篇将详细介绍Quartz如何实现数据库持久化,并...
Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。Quartz 2.2.2 版本是其在特定时间的一个稳定版本,它提供了丰富的功能来帮助开发者创建、安排和管理任务。在描述中提到的"数据库...
Quartz是一款开源的作业调度框架,它允许开发者创建、调度和执行各种类型的任务。这个"quartz动态任务管理"源码包很可能是针对Quartz框架的实现,旨在帮助开发者更方便地管理和控制任务的生命周期。 Quartz的核心...
Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业; 将任务定义为标准...
前言:8月份翻译了Quartz.NET的官方课程:开源的作业调度框架 - Quartz.NET, 有的朋友抱怨难用,确实,目前Qiartz.NET的最新版本还是0.6,还存在很多bug和不完善的地方。本文使用一系列代码示例介绍 Quartz.NET API...
Quartz.NET 是一个开源的作业调度框架,它允许开发者在.NET环境中定义和执行定时任务。这个框架的强大之处在于它的灵活性和可扩展性,使得开发者能够创建复杂的调度逻辑,以满足各种自动化需求。以下是对Quartz.NET...
Quartz是一款开源的作业调度框架,它允许开发者在Java应用程序中定义和执行复杂的定时任务。在Java应用开发中,Quartz常被用来自动化各种后台任务,如数据清理、报告生成等。"Quartz所需jar包"是使用Quartz库进行...
SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...
在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...