title: quartz + mysql - Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
body: <p>I have an issue for <code>Lock wait timeout exceeded</code> from quartz + mysql + Tomcat7. When I use one server for dev and qa, the issue that I am facing didn't come up, but I started seeing an issue in the production env (with 2 servers) after the deployment. </p>
  
  <pre><code>org.quartz.JobPersistenceException: Couldn't store trigger 'trigger1355274000000' for '1355274000000' job: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.JobStoreSupport.storeTrigger(JobStoreSupport.java:1270) 
  at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2961) 
  at org.quartz.impl.jdbcjobstore.JobStoreSupport$38.execute(JobStoreSupport.java:2871) 
  at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3788) 
  at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2865) 
  at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:319) 
  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:3515) 
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447) 
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) 
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) 
  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554) 
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761) 
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046) 
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964) 
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949) 
  at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) 
  at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) 
  at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.updateTrigger(StdJDBCDelegate.java:1295) 
  at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1256) 
  </code></pre>
  
  <p>This is my quartz config.</p>
  
  <pre><code>org.quartz.scheduler.instanceName = ApplicationDemoScheduler
  org.quartz.scheduler.instanceId = AUTO
  
  org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
  org.quartz.threadPool.threadCount=10
  org.quartz.threadPool.threadPriority = 5
  org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
  org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer=true
  org.quartz.jobStore.misfireThreshold=180000
  
  org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
  org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  org.quartz.jobStore.useProperties=false
  org.quartz.jobStore.dataSource=qzDS
  org.quartz.jobStore.tablePrefix=QRTZ_
  org.quartz.jobStore.isClustered=true
  org.quartz.jobStore.selectWithLockSQL=select LOCK_NAME from QRTZ_LOCKS where LOCK_NAME=?
  org.quartz.jobStore.clusterCheckinInterval = 20000
  
  org.quartz.scheduler.dbFailureRetryInterval=15000
  
  
  org.quartz.dataSource.qzDS.jndiURL=java:comp/env/jdbc/appDemoJndi
  </code></pre>
  
  <p>And this data source is referencing the data source configured in the Tomcat.</p>
  
  <pre><code> &lt;Resource name="jdbc/appDemoJndi" auth="Container" type="javax.sql.DataSource"
            username="testuser" password="test_pswd"
            url="jdbc:mysql://localhost/testuser"
            driverClassName="com.mysql.jdbc.Driver"
            initialSize="20" maxWait="5000"
            maxActive="40" maxIdle="5"
           testWhileIdle="true"
            testOnBorrow="true"
            defaultAutoCommit="false"
            maxOpenPreparedStatements="20" 
            validationQuery="select 1"
            poolPreparedStatements="true"/&gt;
  </code></pre>
  
  <p>I am not relying on any hibernate or anything. I am not quite sure if this error is related to any quartz configuration or MYSQL configuration.</p>
  
  <p>Is there anybody who has had the same issue and resolved it?  Please help...</p>
  
  <p>Thanks.</p>