`

Quartz

阅读更多
//第一步
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-2.3.0-API文档-中文版.zip

    赠送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...

    quartz-2.3.2-API文档-中文版.zip

    赠送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官方数据库大全

    Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业; 将任务定义为标准...

    quartz指南,Quartz 工程

    文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...

    自开发实现Quartz Web管理工具

    网上能找到的Quartz Web管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面。但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的...

    Spring Quartz如何动态配置时间

    Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,广泛应用于 Java 企业级应用程序中。其中一个重要的功能便是动态配置时间,触发相应的任务。在本文中,我们将讨论如何使用 Spring Quartz...

    quartz quartz-1.8.6 dbTables 建表sql

    quartz quartz-1.8.6 dbTables quartz动态任务调度需要的数据库脚本。

    Quartz.NET-2.0

    Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar

    quartz-2.2.3版本的quartz初始化sql语句

    quartz-2.2.3版本的quartz初始化sql语句

    quartz-2.1.1 完整源码

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度 What's New In Quartz Scheduler ...

    Quartz原理及实例

    Quartz原理及实例,spring4.x+Quartz.2.2.1结合的开发,静态和动态实例

    Quartz-2.0.2 CSDN下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...

    Quartz-1.8.6 CSDN 下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...

    quartz-2.3.0-API文档-中英对照版.zip

    赠送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...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...

    quartz-1.6.1-API文档-中文版.zip

    赠送jar包:quartz-1.6.1.jar; 赠送原API文档:quartz-1.6.1-javadoc.jar; 包含翻译后的API文档:quartz-1.6.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.opensymphony.quartz,...

    quartz动态控制定时任务

    Quartz Quartz是一个开源的任务调度框架,可以用来实现定时任务的调度,如定时发送邮件、定时备份数据等。Quartz具有很高的可靠性和灵活性,支持集群部署和分布式调度,并且提供了丰富的API和插件,可以轻松实现...

    Quartz-2.2.3 CSDN 下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...

    Quartz.NET 调度系统 demo

    前言:8月份翻译了Quartz.NET的官方课程:开源的作业调度框架 - Quartz.NET, 有的朋友抱怨难用,确实,目前Qiartz.NET的最新版本还是0.6,还存在很多bug和不完善的地方。本文使用一系列代码示例介绍 Quartz.NET API...

Global site tag (gtag.js) - Google Analytics