石英作业在错误的时间被触发

时间:2017-09-05 12:27:13

标签: quartz-scheduler job-scheduling crontrigger quartz

问题描述: 我们正在进行石英工作,计划在白天的不同时间运行,如下午1点,下午4点和下午7点。问题是作业在预定时间以外的时间被触发和执行。

我们做了什么: 我们已经尝试完全关闭我们的服务器(JBoss)并清理石英表,但这根本没有用。

我们正在使用quartz 1.6,我想知道,如果版本中有任何错误,并且石英升级可以解决问题或者 如果设置石英属性有任何问题,并且可以调整属性来解决此问题。

修改以下详细信息:

我现在纠正了工作时间。此外,除了我们在其日程安排中提到的以外的任何随机时间,工作都会被触发。除了预定的时间之外,没有任何模式被触发。

以下是数据库属性文件中的作业和触发器详细信息。基于这些作业详细信息和触发器详细信息将在Quartz_Triggers和Quartz_CronTrigger表中的DB中设置:

<job>
        <job-detail>
            <name>Match Job</name>
            <group>JB_QUARTZ</group>
            <job-class>com.qd.qehadmin.common.scheduler.MatchJob</job-class>
            <volatility>false</volatility>
            <durability>true</durability>
            <recover>true</recover>
        </job-detail>
        <trigger>
            <cron>
                <name>Match Job Trigger</name>
                <group>JB_QUARTZ</group>
                <job-name>match Job</job-name>
                <job-group>JB_QUARTZ</job-group>
                <cron-expression>0 0 13,16,19 * * ?</cron-expression>
            </cron>
        </trigger>
    </job>

以下是DB中的石英属性详细信息:

# Configure Main Scheduler Properties  
#============================================================================
org.quartz.scheduler.instanceName = JB_QUARTZ
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool  
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore  
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.dataSource = jobSchedulerDS
org.quartz.jobStore.tablePrefix = JB_QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 10000
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.jobSchedulerDS.jndiURL=java:JBAPI
org.quartz.dataSource.jobSchedulerDS.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
#java.naming.provider.url=jnp://localhost:3099
java.naming.provider.url=jnp://166.20.337.12:8441,166.20.337.14:8441,166.20.337.16:8441,166.20.337.19:8441
#============================================================================

以下是作业的Java代码:

public void execute(JobExecutionContext ctx) throws JobExecutionException
    {

        try{        
            //Scheduler scheduler = new StdSchedulerFactory().getScheduler();           
            SendEmail sm = new SendEmail();     
            boolean running = false;            

                if (ctx.getJobDetail().getKey().getName().equalsIgnoreCase("match Job") ) { 
                    LogFile.MATCH_JOB.logInfo("Match jobs size  : "+ctx.getScheduler().getCurrentlyExecutingJobs().size(), this.getClass().getName());  
                    if(ctx.getScheduler().getCurrentlyExecutingJobs().size()==1)
                    {
                    initClient(); //This method will read properties from DB                    
                    startTime=System.currentTimeMillis();                   
                    Match(); //This method will execute job level code  
                    endTime=System.currentTimeMillis();

                    LogFile.MATCH_JOB.logInfo("***Match job ends*** Loadtest: "+Constants.loadTest+" in time: "+(endTime-startTime)/1000 + "secs", this.getClass().getName());
                }
                    else
                    {
                        running=true;  
                    } 
                }


            if(running)  
            { 
                LogFile.MATCH_JOB.logInfo("The Match job is already running – sending email",this.getClass().getName());
                sm.sendEmail();
            }       

        }catch(Exception e){
            e.printStackTrace();
            LogFile.MATCH_JOB.logError("***Match Job Error*** " +e.getStackTrace(), this.getClass().getName());
        }
    }

0 个答案:

没有答案