2016-10-26 7 views
0

Ich habe Quartz konfiguriert, um geplante Jobs aus der Datenbank zu verwenden. Nun, wenn ich starten Sie den Scheduler mit:Datenbankfehler nach Fehlzündungen behoben. Qualtz

try { 
      // Grab the Scheduler instance from the Factory 
      Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 


      // and start it off 
      scheduler.start(); 

      scheduler.shutdown(); 

     } catch (Exception se) { 
      Log.log(LogLevel.ERROR, se.getMessage()); 
     } 

Die Konfigurationsdatei des Projekts wie folgt aussieht:

org.quartz.scheduler.instanceName = DatabaseScheduler 
org.quartz.scheduler.skipUpdateCheck = true 
org.quartz.threadPool.threadCount = 3 

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate 
org.quartz.dataSource.myDB.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver 
org.quartz.dataSource.myDB.URL = jdbc:sqlserver://server:1433;databaseName=schedules 
org.quartz.dataSource.myDB.user = sa  
org.quartz.dataSource.myDB.password = password 
org.quartz.dataSource.myDB.maxConnections = 2 

org.quartz.jobStore.tablePrefix = QRTZ_ 
org.quartz.jobStore.dataSource = myDB 
org.quartz.scheduler.misfirePolicy = doNothing 

Der Fehler, den ich ist bekam:

org.quartz.JobPersistenceException: Database error recovering from misfires. [See nested exception: java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.InterruptedException] 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3213) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3951) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3972) 
Caused by: java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.InterruptedException 
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) 
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62) 
    at com.mchange.v2.c3p0.stmt.GooGooStatementCache.acquireStatement(GooGooStatementCache.java:562) 
    at com.mchange.v2.c3p0.stmt.GooGooStatementCache.checkoutStatement(GooGooStatementCache.java:168) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.checkoutStatement(NewPooledConnection.java:234) 
    at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:199) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.invoke(AttributeRestoringConnectionInvocationHandler.java:73) 
    at com.sun.proxy.$Proxy3.prepareStatement(Unknown Source) 
    at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.countMisfiredTriggersInState(StdJDBCDelegate.java:390) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3192) 
    ... 2 more 

Kann mir jemand helfen mit diesem Fehler? Ich habe mir auch den Stackoverflow post angeschaut. Ohne etwas Glück. Ich benutze Quartz 2.2.3. Selbst wenn meine Datenbanktabellen leer sind, habe ich den Fehler bekommen.

Antwort

0

Das Problem gefunden. In meinem Quellcode startet der Scheduler und schließt sofort den Scheduler. In dieser Zeit kann nichts geplant werden und auch der Start des Schedulers wurde nicht beendet, bevor der Close aufgerufen wurde. Durch das Entfernen des nahen Anrufs funktionierte es ordnungsgemäß.