`
pavel
  • 浏览: 928175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Quartz(二)在Spring中动态启动,暂定,添加,删除定时功能

阅读更多

动态启动,暂定,添加,删除定时功能,可传参数
Spring中使用Quartz的3种方法(MethodInvokingJobDetailFactoryBean,implements Job,extends QuartzJobBean)
以下介绍一下实现job接口的方法,通过此方法可以动态启动,暂定,添加,删除定时功能,可传参数。
所有数据全部持久化到数据表中,不再需要XML配置文件存储数据。quartz已经封装了持久化方法。数据表用的MYSQL见附件
配置quartz. properties
Java代码
#============================================================================  
# Configure Main Scheduler Properties    
#============================================================================  
   
org.quartz.scheduler.instanceName = TestScheduler  
org.quartz.scheduler.instanceId = AUTO  
   
#============================================================================  
# Configure ThreadPool    
#============================================================================  
   
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
org.quartz.threadPool.threadCount = 5 
org.quartz.threadPool.threadPriority = 4 
   
#============================================================================  
# Configure JobStore    
#============================================================================  
   
org.quartz.jobStore.misfireThreshold = 60000 
   
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore  
   
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
##org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate  
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate  
org.quartz.jobStore.dataSource = myDS  
org.quartz.jobStore.tablePrefix = QRTZ_  
org.quartz.jobStore.isClustered = false 
   
#============================================================================  
# Configure Datasources    
#============================================================================  
   
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver  
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf8  
org.quartz.dataSource.myDS.user = root  
org.quartz.dataSource.myDS.password =   
org.quartz.dataSource.myDS.maxConnections = 5 
   
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver  
#org.quartz.dataSource.myDS.URL = jdbc:postgresql:dev  
#org.quartz.dataSource.myDS.user = jhouse  
#org.quartz.dataSource.myDS.password =   
#org.quartz.dataSource.myDS.maxConnections = 5 
   
#============================================================================  
# Configure Plugins   
#============================================================================  
   
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin  
 
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin  
# init plugin will load jobs.xml as a classpath resource i.e. /jobs.xml if not found on file system  
#org.quartz.plugin.jobInitializer.fileName=jobs.xml  
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false 
#org.quartz.plugin.jobInitializer.failOnFileNotFound = false 

#============================================================================
# Configure Main Scheduler Properties 
#============================================================================
 
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO
 
#============================================================================
# Configure ThreadPool 
#============================================================================
 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 4
 
#============================================================================
# Configure JobStore 
#============================================================================
 
org.quartz.jobStore.misfireThreshold = 60000
 
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
 
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
##org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
 
#============================================================================
# Configure Datasources 
#============================================================================
 
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf8
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password =
org.quartz.dataSource.myDS.maxConnections = 5
 
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
#org.quartz.dataSource.myDS.URL = jdbc:postgresql:dev
#org.quartz.dataSource.myDS.user = jhouse
#org.quartz.dataSource.myDS.password =
#org.quartz.dataSource.myDS.maxConnections = 5
 
#============================================================================
# Configure Plugins
#============================================================================
 
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin

#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
# init plugin will load jobs.xml as a classpath resource i.e. /jobs.xml if not found on file system
#org.quartz.plugin.jobInitializer.fileName=jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
#org.quartz.plugin.jobInitializer.failOnFileNotFound = false
在这里采用JobStoreTX,将任务持久化到数据中,而不再是简单的内存方式:RAMJobStore
在XML里加入:
在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化。
Xml代码
<servlet> 
      <servlet-name> 
          QuartzInitializer  
      </servlet-name> 
      <servlet-class> 
          org.quartz.ee.servlet.QuartzInitializerServlet  
      </servlet-class> 
      <init-param> 
          <param-name>config-file</param-name> 
          <param-value>/quartz.properties</param-value> 
      </init-param> 
      <init-param> 
          <param-name>shutdown-on-unload</param-name> 
          <param-value>true</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
  </servlet> 

   <servlet>
         <servlet-name>
             QuartzInitializer
         </servlet-name>
         <servlet-class>
             org.quartz.ee.servlet.QuartzInitializerServlet
         </servlet-class>
         <init-param>
             <param-name>config-file</param-name>
             <param-value>/quartz.properties</param-value>
         </init-param>
         <init-param>
             <param-name>shutdown-on-unload</param-name>
             <param-value>true</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>

Java代码
public interface TimerService  
{  
    public void setJobName(String jobName);  
 
    public void setJobGroup(String jobGroup);  
      
    public void setClassName(String string);  
      
    public void setCronExpression(String cronExpression);  
 
    public void setParameterNames(String[] strings);  
 
    public void setParameterValues(String[] strings);  
      
    /** 
     * 设置定时时间 
     * @param request 
     * @param jobName 
     * @param jobGroup 
     * @param triggerName 
     * @param triggerGroup 
     * @param cronExpression 
     */ 
    void saveCron(HttpServletRequest request,String jobName,String jobGroup,String triggerName,String triggerGroup,String cronExpression) throws SchedulerException, ParseException;  
      
    /** 
     * 删除定时器 
     * @param request 
     * @param jobName 
     * @param jobGroup 
     */ 
    void deleteTimer(HttpServletRequest request,String jobName,String jobGroup) throws SchedulerException;  
      
    /** 
     * 立即执行定时功能 
     * @param request 
     * @param jobName 
     * @param jobGroup 
     */ 
    void runNowTimer(HttpServletRequest request,String jobName,String jobGroup) throws SchedulerException;  
      
    /** 
     * 根据名称和组别暂停Tigger 
     * @param triggerName 
     * @param group 
     */ 
    void pauseTrigger(HttpServletRequest request,String triggerName,String group) throws SchedulerException;  
      
    /** 
     * 恢复Trigger 
     * @param triggerName 
     * @param group 
     */ 
    void resumeTrigger(HttpServletRequest request,String triggerName,String group) throws SchedulerException;  
      
    /** 
     * 删除Trigger 
     * @param triggerName 
     * @param group 
     */ 
    boolean removeTrigdger(HttpServletRequest request,String triggerName,String group) throws SchedulerException;  
}  
 
public class TimerServiceImpl implements TimerService  
{  
    private ApplicationContext appCtx = null;  
    private Scheduler scheduler;  
    private String jobName = "";  
    private String jobGroup ="";  
    private String className = "";  
    private String cronExpression = "";  
    private String parameterNames[] = {};  
    private String parameterValues[] = {};  
    private JobDetail jobDetail = new JobDetail();  
 
    public String getJobName() {  
        return jobName;  
    }  
 
    public void setJobName(String jobName) {  
        this.jobName = jobName;  
    }  
 
    public String getJobGroup() {  
        return jobGroup;  
    }  
 
    public void setJobGroup(String jobGroup) {  
        this.jobGroup = jobGroup;  
    }  
 
    public String getClassName() {  
        return className;  
    }  
 
    public void setClassName(String string) {  
        className = string.trim();  
    }  
 
    public String getCronExpression() {  
        return cronExpression;  
    }  
      
    public void setCronExpression(String cronExpression) {  
        this.cronExpression = cronExpression;  
    }  
      
    public JobDetail getJobDetail() {  
        return jobDetail;  
    }  
 
    public void setJobDetail(JobDetail detail) {  
        jobDetail = detail;  
    }  
 
    public String[] getParameterNames() {  
        return parameterNames;  
    }  
 
    public String[] getParameterValues() {  
        return parameterValues;  
    }  
 
    public void setParameterNames(String[] strings) {  
        parameterNames = strings;  
    }  
 
    public void setParameterValues(String[] strings) {  
        parameterValues = strings;  
    }  
 
    public void saveTimer(HttpServletRequest request, String[] parameterNames,String[] parameterValues,JobDetail jobDetail)   
       throws SchedulerException, ClassNotFoundException   
    {  
        className = jobDetail.getJobClass().getName();  
        Class jobClass = Class.forName(className);  
        jobDetail.setJobClass(jobClass);      
        for (int i =0; i < parameterNames.length; i++) {  
            if (parameterNames[i].trim().length() > 0 && parameterValues[i].trim().length() > 0) {  
                jobDetail.getJobDataMap().put(parameterNames[i].trim(), parameterValues[i].trim());  
                jobDetail.getJobDataMap().put(parameterNames[i].trim(), parameterValues[i].trim());  
            }  
        }  
        boolean replace = true;  
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.addJob(jobDetail, replace);  
    }  
 
    public void saveCron(HttpServletRequest request, String jobName, String jobGroup, String triggerName  
       , String triggerGroup, String cronExpression) throws SchedulerException, ParseException   
    {  
        CronTrigger trigger = null;  
        if (cronExpression.length() > 2) {  
            trigger = new CronTrigger(triggerName,triggerGroup,jobName,jobGroup,cronExpression);  
        }  
        trigger.setVolatility(false);  
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.scheduleJob(trigger);  
    }  
      
    public void deleteTimer(HttpServletRequest request, String jobName,String jobGroup) throws SchedulerException   
    {  
        this.jobDetail = scheduler.getJobDetail(jobName, jobGroup);  
        if(this.jobDetail!=null){  
            scheduler = ScheduleBase.getCurrentScheduler(request);  
            scheduler.deleteJob(jobName, "DEFAULT");  
        }  
    }  
 
    public void runNowTimer(HttpServletRequest request, String jobName,String jobGroup) throws SchedulerException   
    {  
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.triggerJob(jobName, jobGroup);  
    }  
      
    public void pauseTrigger(HttpServletRequest request, String triggerName,String group) throws SchedulerException  
    {     
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.pauseTrigger(triggerName, group);//停止触发器  
    }  
      
    public void resumeTrigger(HttpServletRequest request, String triggerName,String group) throws SchedulerException  
    {         
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        //Trigger trigger = scheduler.getTrigger(triggerName, group);  
        scheduler.resumeTrigger(triggerName, group);//重启触发器  
    }  
      
    public boolean removeTrigdger(HttpServletRequest request, String triggerName,String group) throws SchedulerException  
    {         
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.pauseTrigger(triggerName, group);//停止触发器  
        return scheduler.unscheduleJob(triggerName, group);//移除触发器  
    }  
      
    public void timerDataJob(JobExecutionContext context)   
    {  
    }  
}  
//实现job接口才能定时运行  
public class TimerDataJob implements Job  
{  
 
    private ApplicationContext appCtx = null;  
    private TimerService timerService = null;  
    public void execute(JobExecutionContext context)  
            throws JobExecutionException  
    {  
        try {  
            Map parameters=context.getJobDetail().getJobDataMap();  
            String str = (String)parameters.get("");//通过此方法获得需要的参数  
            appCtx = ApplicationContextKeeper.getAppCtx();//servlet类,项目启动时讲配置文件读入  
            timerService = (TimerService)appCtx.getBean("timerService");  
            System.out.println("----------定时结束-----------");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

 

来源:http://mengqingyu.iteye.com/blog/568935

分享到:
评论

相关推荐

    quartz整合springbatch动态集群定时实现mysql参考

    在这个“quartz_springbatch_dynamic”项目中,我们将看到如何将这两个强大的工具结合起来,以实现动态集群环境中的定时任务执行,并使用MySQL作为数据存储。 Quartz是一个开源的作业调度框架,允许开发者创建、...

    spring+quartz动态定时任务创建 +mybatis

    在Spring中整合Quartz,我们可以利用Spring的管理能力,如bean的生命周期管理和事务管理,来更方便地创建和管理定时任务。 **Spring+Quartz动态定时任务创建** 将Spring与Quartz结合,我们可以方便地在运行时动态...

    spring注解Quartz定时执行功能

    在Spring框架中集成Quartz库可以实现强大的定时任务管理功能。Quartz是一个开源的作业调度框架,它允许程序创建和管理任务,以便在特定时间自动执行。Spring通过其优秀的依赖注入(DI)和AOP(面向切面编程)特性,...

    spring和quartz的定时器的启动和停止例子

    本篇将深入探讨如何在Spring中启动和停止Quartz定时器。 首先,我们需要理解Spring和Quartz的基本概念。Spring是一个强大的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。而...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    5. **Spring的AOP与定时任务**:Spring的AOP(面向切面编程)可以用于在定时任务执行前后添加额外的逻辑,比如记录日志、事务管理等。这可以通过定义切面和通知来实现。 6. **异常处理**:在设计定时任务时,需要...

    spring+springMVC+mybatis+quartz动态定时任务创建

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...

    quartz动态添加、修改和删除定时任务

    本教程将详细介绍如何动态地在Quartz中添加、修改和删除定时任务,以实现灵活的任务控制。 首先,我们需要理解Quartz的核心组件。主要有以下几个: 1. **Job**:这是执行任务的实际代码,代表一个可执行的工作单元...

    Spring Quartz如何动态配置时间

    在本文中,我们将讨论如何使用 Spring Quartz 实现动态配置时间,并提供了详细的实现步骤和实践经验。 动态配置时间的目的 在实际应用中,任务的执行时间往往需要根据业务需求进行动态调整,以满足不同的需求场景...

    Spring Quartz 动态暂停、恢复、修改定时任务

    Spring Quartz 动态暂停、恢复、修改定时任务的一个demo,使用maven构建,框架采用spring springmvc jpa,数据库mysql,含数据库脚本,运行可用,页面访问地址http://localhost:8080/quartz_demo/quartz/list

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    对于动态定时任务,Quartz提供了一种灵活的方式,允许在运行时添加、修改或删除任务。例如,可以创建一个服务接口,通过调用该接口来动态调整Trigger,从而达到改变任务执行频率或暂停任务的目的。 Quartz的集群...

    java spring quartz 动态定时任务

    Spring与Quartz的结合使用,使得我们可以方便地在Spring框架下管理定时任务,同时还能实现任务的动态添加、修改和删除。 Quartz是一个开源的作业调度框架,支持丰富的调度策略,包括简单的定时执行、按日程表执行...

    Quartz1.7 动态添加、修改和删除定时任务(非spring集成版)

    Quartz是一款功能强大的开源作业调度框架,用于在Java应用程序中创建和管理定时任务。1.7版本是其历史上的一个稳定版本,提供了丰富的API和功能,使得开发者能够灵活地实现定时任务的动态管理,包括添加、修改和删除...

    Quartz+Spring定时触发器例子

    - 如何在Spring中配置Quartz - 如何创建和配置JobDetail和Trigger - Cron表达式的使用和理解 - 如何在Job类中注入依赖 - 如何启动和停止Scheduler - 如何调试和管理定时任务 总的来说,"Quartz+Spring定时触发器...

    基于Spring的Quartz动态定时任务增删改查

    基于Spring的Quartz动态定时任务增删改查,代码简洁。后端采用SpringMvc+Spring+Mybatis+Quartz,前端采用Bootstrap框架,数据库采用MySQL;完成定时任务动态任务初始化,增删改查

    spring整合java quartz实现动态定时任务的前台网页配置与管理

    在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...

    spring+quartz实现动态设置定时任务

    在Spring中集成Quartz,可以充分利用Spring的上下文管理和生命周期管理特性,简化定时任务的配置和管理。 **Quartz** 是一个开源的作业调度框架,它支持复杂的调度策略,如cron表达式,能够创建、调度和执行作业。...

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

    在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java 定时器的功能。 Quartz 介绍 Quartz 是一个开源的作业调度器,可以让开发者轻松地实现任务的定时执行。它提供了强大的调度功能,可以满足复杂...

    spring3配置quartz定时任务

    本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务是在指定时间点或按照一定规律自动执行的任务,这在业务系统中非常常见,例如数据清理、报表生成等。Quartz提供...

    Springboot整合Quartz实现定时任务数据库动态配置

    本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的动态配置。 首先,我们需要在项目中添加依赖。在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-...

    Quartz在Spring中动态设置cronExpression

    标题与描述均聚焦于“Quartz在Spring中动态设置cronExpression”的主题,这涉及到了两个主要的开源项目:Quartz,一个强大的作业调度框架;以及Spring,一个广泛使用的Java平台框架,用于构建企业级应用程序。Quartz...

Global site tag (gtag.js) - Google Analytics