`
wangjingyang2007
  • 浏览: 7167 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

quartz简单实例

    博客分类:
  • java
阅读更多

最近做事务管理的项目,有用到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&param=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&param=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&param=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&param=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简单实例"中,我们将探讨如何在Spring环境下配置和使用Quartz。 首先,我们需要引入Quartz和Spring的依赖。在Maven项目中,这通常通过在pom.xml文件中添加以下依赖来完成: ```xml ...

    spring quartz简单例子

    这个“spring quartz简单例子”是一个实际的项目示例,它展示了如何在Spring框架中集成Quartz库,以便在Tomcat服务器上运行并观察任务执行的效果。下面将详细解释这个例子中的关键知识点。 1. **Spring框架**:...

    一个简单的实现quartz的例子

    这个"一个简单的实现quartz的例子"提供了基础的Quartz使用方法,虽然可能不包含所有功能,但足以帮助初学者理解其核心概念。 Quartz的核心组件包括: 1. **Job**:这是你要调度的任务,它定义了具体的工作逻辑。你...

    Quartz框架简单实例

    本实例是对Quartz框架的简单使用,下载解压后放在tomcat中部署起来就可以运行了,在applicationContext.xml配置文件中配置了定时的时间,自己也可以更改调度时间,初学者可以看看,希望能帮助到您。

    quartz简单实例quartz简单实例

    根据提供的文件信息,我们可以总结出以下关于 Quartz 的知识点: ### 一、Quartz 简介 Quartz 是一个开源的作业调度框架,用于开发 Java 应用程序。它可以被应用在任何 Java 应用中作为一个独立的类库或作为一个为...

    quartz实例,quartz入门例子

    Quartz提供了多种类型的Trigger,如SimpleTrigger(简单触发器)和CronTrigger(基于CRON表达式的触发器)。 3. **Scheduler**:调度器,负责管理和执行Jobs及Triggers。通过`org.quartz.Scheduler`接口与Quartz交互...

    quartz的简单例子和API

    让我们深入探讨一下Quartz的简单应用以及其API的使用。 首先,Quartz的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是实际要执行的任务,而Trigger则定义了何时启动这个Job。Scheduler则...

    基于java的Quartz的实例

    在本实例中,我们将探讨如何基于Java实现Quartz的使用,以及如何将它集成到MyEclipse开发环境中。 一、Quartz简介 Quartz是一个完全由Java编写的开源作业调度框架,它可以用来安排和执行应用程序中的周期性任务。它...

    四个Quartz的简单的例子

    以下是对Quartz及其四个简单示例的详细解释。 ### Quartz简介 Quartz是Java平台上的一个全功能、完全分布式的作业调度框架。它提供了丰富的API来创建、安排和执行任务。Quartz支持CRON表达式、简单触发器、复合...

    Quartz.NET 官方源码及演示例子

    以下是对Quartz.NET及其官方源码和演示例子的详细解析。 **Quartz.NET核心概念** 1. **作业(Jobs)**:作业是实际执行的工作单元,它们包含了要运行的任务代码。开发者可以自定义作业类来实现所需的功能。 2. **...

    spring的quartz使用实例

    Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合Quartz使用实例的详细说明: 1. **Quartz简介** Quartz是一个强大的、完全开源的作业调度框架,它...

    SpringMVC利用Quartz实现可配置的定时器

    Trigger定义了Job的执行策略,可以是简单触发器或cron触发器。例如,使用CronTrigger可以让任务按照cron表达式定时执行。 ```java &lt;bean id="myTrigger" class="org.springframework.scheduling.quartz....

    quartz实例

    Quartz提供了多种触发器类型,如SimpleTrigger(简单触发器)和CronTrigger(cron表达式触发器)。CronTrigger允许你根据cron表达式定义复杂的调度规则,如每天的特定时间执行。 3. **调度器(Scheduler)**:调度...

    quartz使用例子

    ### Quartz使用例子详解 在Java领域,Quartz是一个强大的任务调度框架,被广泛应用于各种应用场景中,例如定时任务、事件处理等。本文将基于提供的代码片段,深入解析Quartz的使用方法,包括如何定义Job、配置...

    quartz定时调度完整实例

    在这个"quartz定时调度完整实例"中,我们将深入理解Quartz的工作原理和如何在项目中实际应用。 1. **Quartz简介** - Quartz是Cron-like和Calendar-based作业调度的Java实现,它允许开发人员在应用程序中定义、安排...

    quartz.net 最简单的例子

    根据网上的教程,做了一个最简单的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的小例子

    在这个小例子中,我们将深入理解如何使用Java Quartz来实现定时任务。 首先,我们需要引入Quartz的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler ...

    一个最简单的定时任务Quartz的例子

    在这个最简单的Quartz例子中,我们将探讨如何设置和运行一个基本的定时任务。 首先,我们需要了解Quartz的核心组件:Job和Trigger。Job是实际执行的工作单元,而Trigger则是触发Job执行的时间规则。在Quartz中,...

    Quartz的一个简单实例

    ### Quartz 的基本概念与应用实例解析 #### 一、Quartz 概述 Quartz 是 OpenSymphony 开源组织在 Job Scheduling 领域的一个重要开源项目。它能够与 J2EE 和 J2SE 应用程序紧密结合,也可以独立运行。Quartz 被...

    Java任务调度框架Quartz教程实例

    ### Java任务调度框架Quartz教程实例 #### 一、Quartz框架简介 Quartz是一个功能齐全、开源的任务调度服务框架,它可以被集成到几乎所有类型的Java应用程序中,无论是小型的独立应用还是大型的企业级系统,甚至是...

Global site tag (gtag.js) - Google Analytics