`

Quartz 在 Spring 中如何动态配置时间(5)

阅读更多

转自 http://www.iteye.com/topic/399980

首先实现多个JobDeatail并注册,比如: 
引用

<bean id="jobDetail1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
<property name="jobClass"> 
<value>com.sundoctor.example.service.MyQuartzJobBean1</value> 
</property> 

<bean id="jobDetail2" class="org.springframework.scheduling.quartz.JobDetailBean"> 
<property name="jobClass"> 
<value>com.sundoctor.example.service.MyQuartzJobBean2</value> 
</property> 


<bean id="jobDetail3" class="org.springframework.scheduling.quartz.JobDetailBean"> 
<property name="jobClass"> 
<value>com.sundoctor.example.service.MyQuartzJobBean3</value> 
</property> 
... 

其次将多个JobDeatail放到一个HashMap中 
引用

<util:map id = "jobDeatailMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="org.springframework.scheduling.quartz.JobDetailBean"> 
<entry key="jobDetail1" ref="jobDetail1"/> 
<entry key="jobDetail2" ref="jobDetail2"/> 
<entry key="jobDetail3" ref="jobDetail3"/> 
</util:map>


然后在SchedulerService 注入jobDeatailMap 
Java代码    
  1. @Service("schedulerService")    
  2. public class SchedulerServiceImpl implements SchedulerService {    
  3.      
  4.      private Scheduler scheduler;    
  5.      private Map<String,JobDetailBean> jobDeatailMap;    
  6.      
  7.      @Autowired    
  8.      public void setJobDeatailMap(@Qualifier("jobDeatailMap") Map<String,JobDetailBean> jobDeatailMap) {    
  9.          this.jobDeatailMap = jobDeatailMap;    
  10.      }    
  11.      @Autowired    
  12.      public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) {    
  13.          this.scheduler = scheduler;    
  14.      }   
  15. ...  


最后,修改SchedulerServiceImpl中的schedule方法,增加以jobDeatailMap KEY名字为参数: 
Java代码    
  1.      @Override    
  2.      public void schedule(String jobDetailName,String name, CronExpression cronExpression) {    
  3.          if (name == null || name.trim().equals("")) {    
  4.              name = UUID.randomUUID().toString();    
  5.          }    
  6.      
  7.          //这个时候JobDetail根据jobDetailName从jobDeatailMap获取  
  8.          JobDetail jobDetail = jobDeatailMap.get(jobDetailName);  
  9.          try {    
  10.              scheduler.addJob(jobDetail, true);    
  11.      
  12.              CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(),    
  13.                      Scheduler.DEFAULT_GROUP);    
  14.              cronTrigger.setCronExpression(cronExpression);    
  15.              scheduler.scheduleJob(cronTrigger);    
  16.              scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger);    
  17.          } catch (SchedulerException e) {    
  18.              throw new RuntimeException(e);    
  19.          }    
  20.      }  
  21. 其它多态方法一样修改,增加jobDetailName参数。      

调用时,传不同的jobDetailName参数就可以调用不用的JobDetail。 
Java代码    
  1. SchedulerService schedulerService = (SchedulerService)springContext.getBean("schedulerService");   
  2.   
  3. schedulerService.schedule("jobDetail1","审计任务","0/10 * * ? * * *");     
  4.   
  5. schedulerService.schedule("jobDetail2","发放任务","0/10 * * ? * * *");   
  6.   
  7. schedulerService.schedule("jobDetail3","AAA任务","0/10 * * ? * * *");   

 

其实很多时候只需要一个JobDetail就可以了,也可以达到多个JobDetail一样的效果,一个JobDetail的时候可以在Trigger名称上做扩展,可以在调度任务时给Trigger名称加上不同的前缀或后缀,比如Trigger名称增加一个前缀参数, 

Java代码   
  1. @Override    
  2. public void schedule(String name, String prefix ,CronExpression cronExpression) {    
  3.     if (name == null || name.trim().equals("")) {    
  4.         name = UUID.randomUUID().toString();    
  5.     }    
  6.   
  7.     try {    
  8.         scheduler.addJob(jobDetail, true);    
  9.           
  10.         //给Trigger名秒加上前缀  
  11.         name = prefix + name;  
  12.   
  13.         CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(),    
  14.                 Scheduler.DEFAULT_GROUP);    
  15.         cronTrigger.setCronExpression(cronExpression);    
  16.         scheduler.scheduleJob(cronTrigger);    
  17.         scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger);    
  18.     } catch (SchedulerException e) {    
  19.         throw new RuntimeException(e);    
  20.     }    
  21. }    



然后在QuartzJobBean中的executeInternal方法取到Trigger名秒,然后根据其前缀或后缀调用不同的业务逻辑 

Java代码   
  1. public class MyQuartzJobBean extends QuartzJobBean {    
  2.     
  3.     private SimpleService simpleService;    
  4.         
  5.     public void setSimpleService(SimpleService simpleService) {    
  6.         this.simpleService = simpleService;    
  7.     }    
  8.     
  9.     @Override    
  10.     protected void executeInternal(JobExecutionContext jobexecutioncontext) throws JobExecutionException {    
  11.         Trigger trigger = jobexecutioncontext.getTrigger();   
  12.         //取得Trigger名称,判断名称前缀或后缀调用不同的业务逻辑  
  13.         String triggerName = trigger.getName();    
  14.         if(tirggerName ...){  
  15.             simpleService.testMethod(triggerName);    
  16.         }else if(tirggerName ...){  
  17.             simpleService.testMethod2(triggerName);   
  18.         }else{  
  19.             ...  
  20.         }  
  21.     }    
  22.     
  23. }  
分享到:
评论

相关推荐

    Spring Quartz如何动态配置时间

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

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

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

    Quartz 在 Spring 中如何动态配置时间

    本篇文章将详细探讨如何在Spring中动态配置Quartz,以及相关的核心知识点。 首先,我们需要在项目中引入Quartz和Spring的依赖。在Maven的pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler ...

    quartz在Spring中的配置

    通过上述配置,不仅可以在 Spring 应用中实现定时任务的管理,还能根据实际需求动态调整任务的执行时间和状态。这种方式特别适用于需要频繁变更调度规则的应用场景,如 Web 应用中的报表生成、数据同步等任务。使用...

    Quartz在Spring中动态设置cronExpression

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

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

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

    spring mvc quartz 动态设置时间

    - 在`web.xml`中,通过`contextConfigLocation`参数指定了Spring配置文件的位置,这样Spring会自动加载`applicationContext-quartz.xml`。 3. **业务逻辑**: - `SysScheduleServiceImpl`类实现了`...

    关于spring中quartz的配置

    在Spring配置文件(如`applicationContext.xml`)中,定义`SchedulerFactoryBean`来实例化和配置Quartz Scheduler: ```xml &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz....

    定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)

    在Spring配置文件(如`applicationContext.xml`)中配置Quartz的SchedulerFactoryBean。 ```xml &lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; ...

    Spring Quartz动态配置时间.rar

    这个压缩包“Spring Quartz动态配置时间.rar”包含的PDF文档很可能是关于如何在Spring框架中使用Quartz进行动态配置时间的详细教程。下面将详细介绍Spring集成Quartz进行动态任务调度的相关知识点。 1. **Quartz...

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

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

    定时器(quartz+spring)读取数据库配置

    最后,启动Spring容器,Quartz会自动加载数据库中的Job和Trigger配置,按照设定的时间执行相应的任务。 通过这种方式,我们可以构建一个高度可扩展和可配置的定时任务系统,只需在数据库中修改Job和Trigger的配置,...

    Spring中Quartz的配置

    接下来是在Spring配置文件中对Quartz进行配置。以下是配置示例: ```xml &lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt; &lt;!-- 要调用的工作类 --&gt; ...

    spring quartz 非配置动态定时

    在Spring配置文件中,可以使用`SchedulerFactoryBean`来初始化并管理Scheduler。这个bean将负责启动、停止Scheduler,以及处理其他相关的生命周期事件。 在非配置动态定时任务中,我们不再在XML或Java配置中硬编码...

    quartz和spring-quartz

    学习Quartz和Spring-Quartz,不仅需要理解它们的基本概念,还要掌握如何在实际项目中进行配置和使用。例如,创建一个定时任务,你需要定义Job类,配置Trigger,然后在Spring的配置文件中设置Scheduler。此外,熟悉...

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

    2. 配置Scheduler:在Spring的配置文件中,使用`SchedulerFactoryBean`来初始化和配置Quartz Scheduler。可以设置如数据库存储、线程池大小等参数。 3. 创建Job类:定义一个实现了`org.quartz.Job`接口的类,这是...

    spring2与quartz在Web整合

    3. **整合过程**:整合 Spring 2 和 Quartz 需要在 Spring 配置文件中声明 Job 和 Trigger 的 Bean,并指定它们的关联。Spring 可以通过其自身的 JobFactory 来创建 Job 实例,使得 Job 可以利用 Spring 的 DI 功能...

    Quartz+Spring定时触发器例子

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

Global site tag (gtag.js) - Google Analytics