我有一个运行Quartz 1.6.1 w/persistent job store的应用程序,MySQL 5.1作为DB.这个应用程序用于在Tomcat6中启动.在某些时候,它开始在每次启动时抛出以下异常:
- MisfireHandler: Error handling misfires: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction [See nested exception: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction]
at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:112)
at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:112)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3075)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3838)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3858)
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at …Run Code Online (Sandbox Code Playgroud) 我有一个使用Quartz Scheduler来安排作业的应用程序.该应用程序目前正在运行Quartz 1.6.2版.我的JobStore是org.quartz.impl.jdbcjobstore.JobStoreTX,带有支持它的Oracle数据库.启用了群集,但只有一个使用该数据库的调度程序.我的Quartz threadPool配置如下:
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
Run Code Online (Sandbox Code Playgroud)
我的工作是长期运行的,因此当触发器触发新作业时,运行5个作业(我的thead池允许的最大值)是相当普遍的.新触发的工作失败了,我看到如下的日志消息:
2011-05-20 04:09:30,097 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:29 05/20/2011
2011-05-20 04:09:30,120 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:09:30,125 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:30 05/20/2011
2011-05-20 04:09:30,138 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - …Run Code Online (Sandbox Code Playgroud) 我们在集群环境中使用石英调度程序(集群中的两个节点,指向单个Oracle数据库).目前我们有两个工作,几乎每一小时运行一次.
我们为quartz作业提供了单独的数据库模式.我们注意到石英每15秒检查一次数据库(clusterCheckinInterval的默认值).
我们不喜欢这样,喜欢减少它的频率.我们想到的是给出一个1分钟的频率,但大多数示例配置给出了clusterCheckinInterval为20000.
有人可以为clusterCheckinInterval推荐一个合适的值吗?
来自Quartz文档:
org.quartz.jobStore.clusterCheckinInterval
Set the frequency (in milliseconds) at which this instance "checks-in"* with the other instances of the cluster. Affects the quickness of detecting failed instances.
Run Code Online (Sandbox Code Playgroud) 我使用Quartz运行我的作业,每隔50秒使用一个cron表达式:
Cron_Expression = "0/50 * * * * ?"
Run Code Online (Sandbox Code Playgroud)
发生的事情是我的工作在几秒钟内运行:50,60,50,60 ......,而不是每50秒!并且不会在第二个"0"运行.
从0开始,每50秒正确的cron表达式是什么?
Java中有没有办法从Cron Expression中找到"Last Fired Time".
例如,如果现在= 2010年4月25日晚上10点,cron表达"0 15 10?**"(石英)应该会回复我25-Apr-2010 10:15 am
注意:1)我不关心我们是否使用标准cron表达式(如Unix和Quartz)或不那么受欢迎的表达式,如果他们可以获取正确的"最后发射时间"2)它也不是字面上的"最后一次发射时间"作为触发器可能没有触发,但逻辑上应该有一种方法可以告诉它(最终会)触发的时间.
我正在使用带有Grails 1.3.7的石英插件.我需要加载平衡/群集使用石英作业的服务器应用程序.显然这是支持但我发现所有谷歌搜索结果和文档中的链接都被破坏了.我发现了一些原始的Java示例,但我认为Grails有更粗略的方法来做到这一点.我需要的只是一个用作模板的简单示例.我知道我需要以某种方式启用quartz来使用JDBC来存储作业和管理锁定.
我认为链接到单个样本会做到这一点.但实际上,每当我发现一些看起来很有前景的东西时,它就会指向兵马俑网站上的断开链接.几乎每个网站最终都会引导我到这里:http://www.opensymphony.com/quartz/wikidocs/TutorialLesson9.html但是当我看到兵马俑的网站时,我看到Java的东西,但没有grails.如果Java是唯一的方法,那么就这样吧,但我觉得必须有一些grails专业知识在那里的某个地方!
TIA.
我不太确定这是更多的Openbravo问题还是更多的Quartz问题,但我们有一些手动流程通过Openbravo ProcessRequest对象(OB v2.50MP24)按计划运行,但似乎进程运行了两次,在同一时间.Openbravo扩展了Quartz平台以进行调度.我试图通过确保我的流程类扩展此类来自行解决此问题:
import java.util.List;
import org.openbravo.dal.service.OBDal;
import org.openbravo.model.ad.ui.ProcessRequest;
import org.openbravo.scheduling.ProcessBundle;
import org.openbravo.service.db.DalBaseProcess;
public abstract class RBDDalProcess extends DalBaseProcess {
@Override
protected void doExecute(ProcessBundle bundle) throws Exception {
org.quartz.Scheduler sched = org.openbravo.scheduling.OBScheduler
.getInstance().getScheduler();
int runCount = 0;
synchronized (sched) {
List<org.quartz.JobExecutionContext> currentlyExecutingJobs = (List<org.quartz.JobExecutionContext>) sched
.getCurrentlyExecutingJobs();
for (org.quartz.JobExecutionContext jec : currentlyExecutingJobs) {
ProcessRequest processRequest = OBDal.getInstance().get(
ProcessRequest.class, jec.getJobDetail().getName());
if (processRequest == null)
continue;
String processClass = processRequest.getProcess()
.getJavaClassName();
if (bundle.getProcessClass().getCanonicalName()
.equals(processClass)) {
runCount++;
}
}
}
if (runCount > …Run Code Online (Sandbox Code Playgroud) 如何禁用Quartz日志记录?Quartz在我的控制台上打印INFO语句.我试图在log4j.properties文件中使用以下语句禁用它
log4j.logger.org.quartz=ALL, CONSOLE
Run Code Online (Sandbox Code Playgroud) 我收到这个错误:
org.quartz.JobPersistenceException: Couldn't store job: Driver's Blob representation is of an unsupported type: oracle.sql.BLOB [See nested exception: java.sql.SQLException: Driver's Blob representation is of an unsupported type: oracle.sql.BLOB]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1103)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$3.execute(JobStoreSupport.java:1042)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:3670)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3742)
at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:90)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInLock(JobStoreSupport.java:3666)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1030)
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:743)
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:243)
at com.akbank.bsa.core.ApplicationStartup.run(ApplicationStartup.java:66)
at com.akbank.bsa.core.ApplicationStartup.initialize(ApplicationStartup.java:24)
at com.akbank.bsa.listener.Startup.contextInitialized(Startup.java:17)
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850)
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: Driver's Blob representation is of an unsupported type: oracle.sql.BLOB
at …Run Code Online (Sandbox Code Playgroud) JobDetail.requestsRecovery属性文档说明如下
如果遇到"恢复"或"故障转移"情况,则指示调度程序是否应重新执行作业.
现在,什么是"复苏"情况或"故障转移"情况?
他们有什么不同?
仅当JVM在作业执行期间崩溃时才会发生恢复,或者如果由于异常而导致作业执行失败,是否会发生恢复?
quartz-scheduler ×10
java ×7
jdbc ×2
crontrigger ×1
grails ×1
locking ×1
mysql ×1
openbravo ×1
quartz.net ×1
scheduling ×1
spring ×1
transactions ×1