Quartz之并发问题

#Spring中使用Quartz的3种方法(MethodInvokingJobDetailFactoryBean,implements Job,extends QuartzJobBean)

以下介绍一下MethodInvokingJobDetailFactoryBean方法
① targetMethod: 指定需要定时执行scheduleInfoManager中的simpleJobTest()方法
② concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。
③ cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。
④ triggers:通过再添加其他的ref元素可在list中放置多个触发器。scheduleInfoManager中的simpleJobTest()方法注意:此方法没有参数,如果scheduleInfoManager有两个方法simpleJobTest()和simpleJobTest(String argument),则spring只会去执行无参的simpleJobTest().
public void simpleJobTest()
{         
   log.warn("uh oh, Job is scheduled !'" + "' Success...");    
}

Quartz在Spring中动态设置cronTrigger方法一Spring配置文件:
将定时器注入到业务逻辑层Manager
Xml代码
           

<!--注册job -->
 <bean id="emailJob" class="com.quartz.EmailJob"></bean>
 <!--通过反射调用job,任务详情, jobdetail -->
 <bean id="jobDetail"
  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <!--注入任务类 -->
  <property name="targetObject" ref="emailJob"></property>
  <!-- 指定调用那一个方法 -->
  <property name="targetMethod" value="sendMail"></property>
 </bean>
 <!-- 注册一个触发器 -->
 <bean id="emailTrigger"
  class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
  <!-- 注入任务详情 -->
  <property name="jobDetail" ref="jobDetail"></property>
  <!-- 调度规则,每隔5秒执行一次任务 cron表达式-->
  <property name="cronExpression">
   <value>0/5 * * * * ?</value>
  </property>
 </bean>
 <!-- 注册一个调度工厂 -->
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <!-- 注入触发器 -->
  <property name="triggers">
   <list>
    <ref bean="emailTrigger" />
   </list>
  </property>
 </bean>


scheduleInfoManager中的reScheduleJob ()方法及相关方法① reScheduleJob读取数据库,获得自定义定时器调度时间():
Java代码
private Scheduler scheduler;   
 
// 设值注入,通过setter方法传入被调用者的实例scheduler  
public void setScheduler(Scheduler scheduler) {     
     this.scheduler = scheduler;     
}     
rivate void reScheduleJob() throws SchedulerException,ParseException {  
        // 运行时可通过动态注入的scheduler得到trigger,注意采用这种注入方式在有的项目中会有问题,如果遇到注入问题,可以采取在运行方法时候,获得bean来避免错误发生。  
        CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(               "cronTrigger", Scheduler.DEFAULT_GROUP);  
        String dbCronExpression = getCronExpressionFromDB();  
        String originConExpression = trigger.getCronexpression_r();  
    // 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等  
    // 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob  
        if(!originConExpression.equalsIgnoreCase(dbCronExpression)){  
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个开源的任务调度框架,用于在Java应用程序中执行定时任务。进行Quartz性能测试的目的是评估Quartz框架在不同负载条件下的性能表现。 首先,我们可以通过模拟并发任务调度来测试Quartz的性能。使用工具或脚本生成大量任务,并配置Quartz框架来同时调度这些任务。然后,观察系统的响应时间和吞吐量等性能指标,以评估Quartz在高并发条件下的性能表现。 另外,可以测试Quartz在大规模任务调度下的性能。引入大量任务,如数十万个甚至更多的任务,并观察Quartz框架的任务调度能力和系统的负载情况。通过监测任务执行的时间和系统资源的利用率,可以评估Quartz在处理大规模任务时的性能表现。 此外,还可以测试Quartz框架在集群环境下的性能。在多个节点上部署Quartz集群,并使其进行任务调度。通过观察集群节点之间的负载均衡情况、任务的分配和执行情况,以及系统的处理能力等指标,可以评估Quartz在集群环境下的性能表现。 最后,还可以进行长时间运行的性能测试,以评估Quartz在稳定的运行状态下的性能表现。在一段较长的时间内,持续进行任务调度,并观察系统的稳定性、内存占用、资源释放等指标。这可以帮助判断Quartz框架是否存在内存泄露或其他性能问题。 通过以上的性能测试方法,可以全面评估Quartz框架在不同负载和环境条件下的性能表现,并根据测试结果进行优化和调整,以提高系统的稳定性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值