我有一个使用Quartz 2.2.2库的Java应用程序,并且该应用程序已部署在Weblogic服务器12.2.1.2.0群集上。
我想每5分钟安排一次工作,并使用0 0/5 * 1/1 *吗? * cron表达式和下面的代码。
String strDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(startAt.dateValue()); //new Date()
Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(strDate);
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
JobKey jobKey = new JobKey(jobName);
job = JobBuilder.newJob(jobClass)
.withIdentity(jobKey.getName(), null)
.build();
String endDateVal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(endAt.dateValue());
Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateVal);
System.out.println("QuartzSchedulerSingleton : endDate " + endDate);
trigger = TriggerBuilder.newTrigger()
.withIdentity(jobKey.getName())
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionFireAndProceed())
.startAt(startDate)
.endAt(endDate)
.build();
trigger.getJobDataMap().putAsString("RequestId", new Long(requestId));
scheduler.scheduleJob(job, trigger);
Quartz表中的所有条目均正确发生,但有时石英作业无法执行。即作业开始执行两次,然后跳过执行两次。
以下是使用的Quartz属性。我试图将线程数增加到50(org.quartz.threadPool.threadCount = 50),但这没有帮助。
org.quartz.scheduler.instanceName=QuartzScheduler
org.quartz.scheduler.skipUpdateCheck=true
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=15
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.dataSource=GenericScheduler
org.quartz.jobStore.tablePrefix=QUARTZ_
org.quartz.jobStore.isClustered=true
org.quartz.dataSource.GenericScheduler.jndiURL=jdbc/ocx_hcm
org.quartz.dataSource.GenericScheduler.java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
需要帮助解决此问题。
非常感谢, Jyoti Ranjan