2016-04-21 4 views
0

Also, ich bin sehr neu in Quartz. Und ich habe diese Anwendung, wo ich Daten von einer DB abrufe, sie in eine Excel-Tabelle schreibe und eine Mail-Benachrichtigung sende. Dies muss wöchentlich erfolgen. Zum Testen habe ich meinen Trigger so eingestellt, dass er jetzt alle 5 Minuten wiederholt wird. So, hier ist mein JobListener:Quartz Job nicht ausgeführt, wenn eine Klasse eine andere Klasse ruft

public void contextInitialized(ServletContextEvent servletContext) { 
    Scheduler scheduler; 
    try { 
     System.out.println("Context Initialized"); 
     JobDetail job = JobBuilder.newJob(ScheduledJob.class).withIdentity("schduledJob", "Group").build(); 
     System.out.println("Job Build"); 
     Trigger trigger = TriggerBuilder 
       .newTrigger() 
       .withIdentity("simpleTrigger", "group") 
       .withSchedule(
        SimpleScheduleBuilder.simpleSchedule() 
        .withIntervalInSeconds(300).repeatForever()) 
       .build(); 
     System.out.println("Trigger"); 
     scheduler = new StdSchedulerFactory().getScheduler(); 
     System.out.println("Before Scheduler Start"); 
     scheduler.start(); 
     System.out.println("After Scheduler Start"); 
     scheduler.scheduleJob(job, trigger); 
     System.out.println("Job Scheduled"); 
    } catch (Exception ex) { 
     ex.getStackTrace(); 
    } 
} 

Und hier ist mein Job Klasse:

public void execute(JobExecutionContext arg0) { 
    try { 
     DataFromDB getData = new DataFromDB(); 
     System.out.println("Job Started"); 
     getData.getDataFromDB(); 
     System.out.println("Job End"); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

} 

Ich habe zwei verschiedene Klassen für das Schreiben dieser die E-Mail zu übertreffen und zu senden. Diese Methoden werden irgendwo in der Methode getDataFromDB() aufgerufen. Jetzt, wenn ich meine Anwendung ausführe, gibt es keinen Fehler, keine Ausnahme, stoppt nur an dem Punkt, an dem ich die Objekte erzeuge, um die anderen zwei Methoden von der Methode getDataFromDB() aufzurufen. Wenn ich diese Zeilen entferne, d. H. Objekte erzeuge und diese Methoden aufrufen, läuft sie bis zum Ende. Wenn ich es entferne und es irgendwo weiter unten platziere, läuft es wieder bis zu diesem Punkt und stoppt dann. Ich habe keine Ahnung, was passiert oder warum. Danke im Voraus, dass du mir geholfen hast.

+0

Wie haben Sie überprüft, dass der Anruf bei bestimmten Leitung stoppt? Wenn Sie den Debugger verwenden, um dies zu überprüfen, stellen Sie sicher, dass Sie den neuesten Code ausführen. – Adi

+0

Mehrere syso-Anweisungen. Die Zeilen unmittelbar vor der Objektinitialisierung werden gedruckt und danach wird nichts ausgeführt. –

+0

Können Sie die Methode getDataFromDB() einfügen? – alpert

Antwort

0

Ich benutze immer so etwas wie diese:

Connection conn = null; 
    try { 
     conn = DBConnectionManager.getInstance().getConnection(dataSourceName); 

      PreparedStatement stmt = conn.prepareStatement(querySql); 
      stmt.setString(1, sParameter); 
      ResultSet rs = stmt.executeQuery(); 
      //whatever you need 
    } catch (SQLException e) { 
     throw new RuntimeException("Failed to execute DB connection action.", e); 
    } finally { 
     if (conn != null) { 
      try { 
       conn.close(); 
       conn = null; 
      } catch (SQLException e) { 
       throw new RuntimeException("Failed to close DB connection.", e); 
      } 
     } 
    } 

ich es in eine einzige Klasse setzen kann, und ich habe kein Problem. Natürlich müssen Sie de Datenquelle in Quartz.properties definieren. Hoffe, das hilft!

Verwandte Themen