- 浏览: 7164 次
- 性别:
- 来自: 合肥
最新评论
最近做事务管理的项目,有用到quartz定时发信息的功能,现在将代码贴出来大家拍拍砖
首先引用quartz包至项目下, 然后在web.xml中加上listener,类名为:ScheduleExecutionService
相关java文件如下
ScheduleExecutionService .java
/***********
package quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import javax.servlet.http.HttpServletRequest;
import sofocus.db.model.result.DbResult;
import sofocus.db.model.result.DbRow;
import sofocus.iframe.jms.JmsManager;
import sofocus.portal.service.QuartzService;
import sofocus.service.ServiceFactory;
public class ScheduleExecutionService implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
// 启动时的定时任务,可以加载一些默认的定时任务。
// 如果是把定时规则存入数据库了,需要动态定时的,需要用其他方式加载定时。如项目启动时根据存储的时 间规则,加载一些定时任务。
//根据即时查询数据库存储的任务定时,来触发定时器
QuartzMethod quartzMethod = new QuartzMethod();
boolean flag = quartzMethod.sendMsg(context);
if(flag){
System.out.println("*******************事务调度启动成功***************");
}else{
System.out.println("******************事务调度启动失败****************");
}
}
}
*************/
QuartzMethod .java
/***************
package quartz;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import sofocus.db.model.result.DbResult;
import sofocus.db.model.result.DbRow;
import sofocus.iframe.jms.JmsManager;
import sofocus.portal.service.PersonWorkService;
import sofocus.portal.service.QuartzService;
import sofocus.service.ServiceFactory;
public class QuartzMethod{
/**
* 定义几个变量
*/
static HttpServletRequest request;
private static Scheduler scheduler;
private static CronTrigger cronTrigger;
private static JobDetail jobDetail;
private static String jobName = "";
private static String dateTime = "0/5 * * * * ?";
private static String groupName = scheduler.DEFAULT_GROUP;
private final static QuartzService quartzService = ServiceFactory.getService(QuartzService.class);
private final static PersonWorkService pwService = ServiceFactory.getService(PersonWorkService.class);
private static SchedulerFactory sf = new StdSchedulerFactory();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//添加单个事务(job)
public static void addMethod(String jobName,String groupName,String dateTime){
try {
delMethod(jobName, groupName);
} catch (SchedulerException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jobDetail = new JobDetail(jobName,groupName,ScheduleExecutionService.class);
cronTrigger = new CronTrigger(jobName,groupName);
cronTrigger.setName(jobName);
try {
cronTrigger.setCronExpression(dateTime);
scheduler.scheduleJob(jobDetail, cronTrigger);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 添加日常性事务
* @param jobName 任务名称
* @param jobGroup 任务组名称
* @param triggerName //事务名称
* @param triggerGroup //事务组名称
* @param startTime //开始执行时间
* @param repeatInterval //设置间隔时间
* @param repeatCount //设置循环次数
* @param params
* @throws SchedulerException
*/
public static void addJob(String jobName,String jobGroup,
String triggerName,String triggerGroup,Date startTime,
Integer repeatInterval,Integer repeatCount,HashMap<String,Object> params) throws
SchedulerException{
JobDetail jobDetail = new JobDetail(jobName, jobGroup, ScheduleExecutionService.class);
if(params != null){
jobDetail.getJobDataMap().put("params",params);
}
//触发器
SimpleTrigger simpleTrigger = new SimpleTrigger(triggerName, triggerGroup);
//设置开始时间
simpleTrigger.setStartTime(startTime);
//设置间隔时间
simpleTrigger.setRepeatInterval(repeatInterval);
//设置调用次数
simpleTrigger.setRepeatCount(repeatCount);
Scheduler sched = sf.getScheduler();
sched.scheduleJob(jobDetail,simpleTrigger);
if(!sched.isShutdown())
sched.start();
}
//程序启动时插入所有的事务
public static void addAllMethod(){
DbResult remindRes = quartzService.find(request, "obj_status=1 and row_status=1").getFirstResult();
if(!remindRes.isEmpty()){
for(DbRow row : remindRes){
jobName = row.getString("job_name");
dateTime = row.getString("ruler");
groupName = row.getString("group_name");
try {
delMethod(jobName, groupName);
} catch (SchedulerException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jobDetail = new JobDetail(jobName,groupName,ScheduleExecutionService.class);
cronTrigger = new CronTrigger(jobName,groupName);
cronTrigger.setName(jobName);
try {
cronTrigger.setCronExpression(dateTime);
scheduler.scheduleJob(jobDetail, cronTrigger);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else{
jobDetail = new JobDetail("default_jobName4",
Scheduler.DEFAULT_GROUP, ScheduleExecutionService.class);
cronTrigger = new CronTrigger("default_jobName4",
Scheduler.DEFAULT_GROUP);
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
cronTrigger.setCronExpression(dateTime);
scheduler.scheduleJob(jobDetail, cronTrigger); // 客户
} catch (Exception e) {
System.out.println("任务调度 开启 失败");
e.printStackTrace();
}
}
}
/**
* 根据任务名和任务组名修改任务的触发时间
* @param jobName
* @param jobGroupName
* @param dateTime
* @throws SchedulerException
*/
public static void modifyJobTime(String jobName,String jobGroupName,String dateTime) throws SchedulerException{
Scheduler sched = sf.getScheduler();
Trigger[] trigger = sched.getTriggersOfJob(jobName,jobGroupName);
if(trigger != null){
for(int i=0;i<trigger.length;i++){
try {
((CronTrigger)trigger[i]).setCronExpression(dateTime);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sched.resumeTrigger(trigger[i].getName(),trigger[i].getGroup());
}
}
}
/**
* 根据触发器名修改一个任务的触发时间
* @param triggerName触发器名
* @param triggerGroupName触发器组名
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyTriggerTime(String triggerName,String triggerGroupName,
String time) throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);
if(trigger != null){
//修改时间
((CronTrigger)trigger).setCronExpression(time);
//重启触发器
sched.resumeTrigger(triggerName,triggerGroupName);
}
}
/**
* 移除一个任务
* @param jobName
* @param groupName
* @return
* @throws SchedulerException
*/
public static boolean delMethod(String jobName,String groupName) throws SchedulerException{
boolean result = false;
if(scheduler !=null){
try {
scheduler.deleteJob(jobName, groupName);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = false;
}
}
return result;
}
/**
* 移除一个任务
* @param jobName任务名
* @param jobGroupName任务组名
* @param triggerName触发器名
* @param triggerGroupName触发器组名
* @throws SchedulerException
*/
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器
sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器
sched.deleteJob(jobName,jobGroupName);//删除任务
}
/**
* 计算时间表达式
* @param second 秒
* @param minute 分
* @param hour 时
* @param day 日期
* @param month 月份
* @param week 星期
* @param year 年份
* @param isContactYear 是否包括年份
* @return
*/
public static String getCexpress(String second,String minute,String hour,
String day,String month,String week,String year,boolean isContactYear) {
String cexpress="";
//秒,默认为"0" 取值范围:0-59
if(second != null && !"".equals(second)){
cexpress+=second+" ";
}else{
cexpress+="0 ";
}
/**
* 分 取值范围:0-59
* 默认为"*" 表示每一分钟
* 如果是0 12 表示整12:00触发
* 如果是0/5 12 表示在每天下午12点到12:55期间的每5分钟触发 ,
* 如果是0-5 12 表示12:00到12:05期间的每1分钟触发
* 如果是10,15 12 表示12:10和12:15触发
*/
if(minute != null && !"".equals(minute)){
cexpress+=minute+" ";
}else{
cexpress+="* ";
}
/**
* 小时 取值范围:0-23
* 默认为"*" 表示每一个小时
* 如果是0 表示凌晨触发
* 如果是0-5 表示凌晨到5:00期间
* 如果是10,15 表示10:00和15:00触发
*/
if(hour != null && !"".equals(hour)){
cexpress+=hour+" ";
}else{
cexpress+="* ";
}
/**
* 日期 取值范围:1-31
* 默认为"*" 表示每天
* 如果是15 表示每个月的15号
* 如果是L 表示每个月最后一天
* 注:在指定了星期的时候,把日期这里设置为"?"
*/
if(day != null && !"".equals(day)){
cexpress+=day+" ";
}else{
cexpress+="? ";
}
/**
* 月份 取值范围:1-12
* 默认为"*" 表示每个月
* 如果是 12 表示12月份
*/
if(month != null && !"".equals(month)){
cexpress+=month+" ";
}else{
cexpress+="* ";
}
/**
* 星期 取值范围:1-7 MON,TUE,WED,THU,FRI,SAT,SUN 其中1表示星期日,以此类推
* 默认为"?"
* 如果是WED 表示每个星期三
* 如果是MON-FRI 表示星期一到星期五
* 如果是6L 表示每月最后一个星期五
* 如果是6#3 表示每月第三个星期五
*/
if(week != null && !"".equals(week)){
cexpress+=week+" ";
}else{
cexpress+="? ";
}
//如果包括年份
if(isContactYear){
/**
* 年份 取值范围:1970-2099
* 默认值为空
* 如果是2010 表示只有2010年触发时间
* 如果是2010,2020 表示只有2010
*/
if(year != null && !"".equals(year)){
cexpress+=year;
}
}
return cexpress;
}
public boolean sendMsg(JobExecutionContext context){
String personId = "";
String url = "";
String content = "";
String affairsId = "";
String msg = "";
String addUser = "";
int person_type = 1;
String jobName = context.getJobDetail().getName();
String groupName = context.getJobDetail().getGroup();
boolean flag = false;
DbResult quartzRes = quartzService.find(request, "job_name = ? and group_name = ? and obj_status='1' and row_status = '1'",
new String[]{jobName,groupName},"content","affairs_id").getFirstResult();//取当前触发事务的结果集
if(!quartzRes.isEmpty()){
for(DbRow row : quartzRes){
content = row.getString("content");
affairsId = row.getString("affairs_id");
DbResult pwRes = pwService.find(request, "affairs_id = ? and obj_status='1' and row_status='1'",new String[]{affairsId},"-*,person_id,person_type,row_adduser","pwork_id desc").getFirstResult();
for(DbRow pwRow : pwRes){
personId = pwRow.getString("person_id");
person_type = pwRow.getInteger("person_type");
addUser = pwRow.getString("row_adduser");
if(person_type==0){
url = "/sf/portal/affairs/affairs.do?action=toShowCjAffairs¶m=2&affairs_id="+affairsId;
msg = "您当前有一条事务信息需要处理:<br/> <font color='blue'>"+content+"</font>["+df.format(new Date())+"]<br/><br/><a href='"+url+"' style='float:right'>点击查看</a>";
}else if(person_type==1){
url = "/sf/portal/affairs/affairs.do?action=toShowZxAffairs¶m=2&affairs_id="+affairsId;
msg = "您当前有一条事务信息需要处理:<br/> <font color='blue'>"+content+"</font>["+df.format(new Date())+"]<br/><br/><a href='"+url+"' style='float:right'>点击查看</a>";
}else if(person_type == 2){
url = "/sf/portal/affairs/affairs.do?action=toShowDbAffairs¶m=2&affairs_id="+affairsId;
msg = "您当前有一条事务信息需要处理:<br/> <font color='blue'>"+content+"</font>["+df.format(new Date())+"]<br/><br/><a href='"+url+"' style='float:right'>点击查看</a>";
}else if(person_type == 3){
url = "/sf/portal/affairs/affairs.do?action=toShowGxAffairs¶m=2&affairs_id="+affairsId;
msg = "<font color='red'>"+addUser+"</font><strong>共享</strong>给您一条事务信息: <br/> <font color='blue'>"+content+"</font>["+df.format(new Date())+"]<br/><br/><a href='"+url+"' style='float:right'>点击查看</a>";
}
//sendToUser()为封装的给指定人发送消息的方法,当然,如果你也可以自写方法
JmsManager.sendToUser(personId, "提醒信息",msg, "javascript:alert('打开消息中心')", "", "消息中心", "");
flag = true;
}
}
}
return flag;
}
}
相关推荐
在这个"spring-quartz简单实例"中,我们将探讨如何在Spring环境下配置和使用Quartz。 首先,我们需要引入Quartz和Spring的依赖。在Maven项目中,这通常通过在pom.xml文件中添加以下依赖来完成: ```xml ...
这个“spring quartz简单例子”是一个实际的项目示例,它展示了如何在Spring框架中集成Quartz库,以便在Tomcat服务器上运行并观察任务执行的效果。下面将详细解释这个例子中的关键知识点。 1. **Spring框架**:...
这个"一个简单的实现quartz的例子"提供了基础的Quartz使用方法,虽然可能不包含所有功能,但足以帮助初学者理解其核心概念。 Quartz的核心组件包括: 1. **Job**:这是你要调度的任务,它定义了具体的工作逻辑。你...
本实例是对Quartz框架的简单使用,下载解压后放在tomcat中部署起来就可以运行了,在applicationContext.xml配置文件中配置了定时的时间,自己也可以更改调度时间,初学者可以看看,希望能帮助到您。
根据提供的文件信息,我们可以总结出以下关于 Quartz 的知识点: ### 一、Quartz 简介 Quartz 是一个开源的作业调度框架,用于开发 Java 应用程序。它可以被应用在任何 Java 应用中作为一个独立的类库或作为一个为...
Quartz提供了多种类型的Trigger,如SimpleTrigger(简单触发器)和CronTrigger(基于CRON表达式的触发器)。 3. **Scheduler**:调度器,负责管理和执行Jobs及Triggers。通过`org.quartz.Scheduler`接口与Quartz交互...
让我们深入探讨一下Quartz的简单应用以及其API的使用。 首先,Quartz的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是实际要执行的任务,而Trigger则定义了何时启动这个Job。Scheduler则...
在本实例中,我们将探讨如何基于Java实现Quartz的使用,以及如何将它集成到MyEclipse开发环境中。 一、Quartz简介 Quartz是一个完全由Java编写的开源作业调度框架,它可以用来安排和执行应用程序中的周期性任务。它...
以下是对Quartz及其四个简单示例的详细解释。 ### Quartz简介 Quartz是Java平台上的一个全功能、完全分布式的作业调度框架。它提供了丰富的API来创建、安排和执行任务。Quartz支持CRON表达式、简单触发器、复合...
以下是对Quartz.NET及其官方源码和演示例子的详细解析。 **Quartz.NET核心概念** 1. **作业(Jobs)**:作业是实际执行的工作单元,它们包含了要运行的任务代码。开发者可以自定义作业类来实现所需的功能。 2. **...
Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合Quartz使用实例的详细说明: 1. **Quartz简介** Quartz是一个强大的、完全开源的作业调度框架,它...
Trigger定义了Job的执行策略,可以是简单触发器或cron触发器。例如,使用CronTrigger可以让任务按照cron表达式定时执行。 ```java <bean id="myTrigger" class="org.springframework.scheduling.quartz....
Quartz提供了多种触发器类型,如SimpleTrigger(简单触发器)和CronTrigger(cron表达式触发器)。CronTrigger允许你根据cron表达式定义复杂的调度规则,如每天的特定时间执行。 3. **调度器(Scheduler)**:调度...
### Quartz使用例子详解 在Java领域,Quartz是一个强大的任务调度框架,被广泛应用于各种应用场景中,例如定时任务、事件处理等。本文将基于提供的代码片段,深入解析Quartz的使用方法,包括如何定义Job、配置...
在这个"quartz定时调度完整实例"中,我们将深入理解Quartz的工作原理和如何在项目中实际应用。 1. **Quartz简介** - Quartz是Cron-like和Calendar-based作业调度的Java实现,它允许开发人员在应用程序中定义、安排...
根据网上的教程,做了一个最简单的quartz.net运行例子,即每隔几秒向txt中写入数据: 2015-05-10 20:14:43.397 : 【HelloJob Executed】 **** Job group1.myJob fired @ Sun, 10 May 2015 12:14:43 GMT next ...
在这个小例子中,我们将深入理解如何使用Java Quartz来实现定时任务。 首先,我们需要引入Quartz的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.quartz-scheduler ...
在这个最简单的Quartz例子中,我们将探讨如何设置和运行一个基本的定时任务。 首先,我们需要了解Quartz的核心组件:Job和Trigger。Job是实际执行的工作单元,而Trigger则是触发Job执行的时间规则。在Quartz中,...
### Quartz 的基本概念与应用实例解析 #### 一、Quartz 概述 Quartz 是 OpenSymphony 开源组织在 Job Scheduling 领域的一个重要开源项目。它能够与 J2EE 和 J2SE 应用程序紧密结合,也可以独立运行。Quartz 被...
### Java任务调度框架Quartz教程实例 #### 一、Quartz框架简介 Quartz是一个功能齐全、开源的任务调度服务框架,它可以被集成到几乎所有类型的Java应用程序中,无论是小型的独立应用还是大型的企业级系统,甚至是...