多次调用scheduleJob方法时QUARTZ性能问题

问题描述

我有一个使用Jboss EAP 6平台的ejb应用程序。我已经定义了一个单例ejb服务,该服务处理计划相关的操作(暂停,计划,取消计划作业)。

当我同时调度10个作业时,我会遇到一些性能问题,每个调度作业的操作都需要花费很多时间。甚至我还有一些失火问题。启动服务器时不会发生。但是经过第二次审判,这又是一个问题。我试图更改quartz.properties中的线程数。但这没有任何影响。

我注意到此延迟与Quartz的锁定机制有关。

@Singleton
@Startup
@DependsOn("DSADatabaseInitializerBean")
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
@Lock(LockType.READ)
public class ScheduleManagementBean implements SchedulerManagementBeanRemote,SchedulerManagementBeanLocal {
    private Scheduler scheduler;


    @postconstruct
    public void scheduleJobs() {
        try {
            scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
            scheduler.start();
        } catch (SchedulerException e) {
            logger.error("Error while creating scheduler",e);
        }
    }

    @Override
    public void addSPPeriodicJobToList(int period,List<SimulationJob> simJobList) {
        JobDetail jobDetail;
        Trigger jobTrigger;
        try {
            for (SimulationJob simJob : simJobList) { // configure the scheduler time
                // define the job and tie it to our HelloJob class
                jobDetail = newJob(SimulationJobExecution.class).withIdentity(Long.toString(simJob.getId()),Long.toString(simJob.getvariant().getId())).storeDurably(true).requestRecovery().build();
                // Trigger the job to run between start Time and end time,and then repeat every 15
                // minutes
                jobTrigger = newTrigger().withIdentity(Long.toString(simJob.getId()),Long.toString(simJob.getvariant().getId())).startAt(simJob.getStartDateTime()).endAt(
                        simJob.getEndDateTime()).withPriority(simJob.getPriority()).withSchedule(
                        simpleSchedule().withIntervalInMilliseconds(
                                period).repeatForever().withMisfireHandlingInstructionNextWithRemainingCount()).build();
                scheduler.scheduleJob(jobDetail,jobTrigger);
                logger.info("Job is created with key: " + jobDetail.getKey());
            }
        } catch (SchedulerException e) {
            logger.error("Unable to schedule job with key!" + jobDetail.getKey(),e);
        }
    }
}

在这里您可以找到日志。

12:11:24,637 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1708
12:11:32,066 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1709
12:11:42,066 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1710
[com..server.simulation.ejb.ScheduleManagementBean] (EJB default - 7) Job is 
created with key: 1.1711
12:12:00,558 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1712
12:12:00,572 INFO  [com.siemen.server.simulation.ejb.ScheduleManagementBean] 
(EJB default - 7) Job is created with key: 1.1713
12:12:00,577 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1714
12:12:00,582 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1715
12:12:00,587 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1716
12:12:00,593 INFO  [com.server.simulation.ejb.ScheduleManagementBean] (EJB 
default - 7) Job is created with key: 1.1717

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...