2016-04-21 122 views
0

所以,我對Quartz很新。我有這個應用程序,我從數據庫中獲取數據,將它寫入Excel工作表併發送郵件通知。這必須每週進行一次。爲了進行測試,我已經設置了觸發器,現在每5分鐘重複一次。所以,這裏是我的JobListener:當一個班級調用另一個班級時,Quartz Job不運行

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(); 
    } 
} 

這是我的工作類:

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(); 
    } 

} 

我寫這篇脫穎而出和發送電子郵件的兩個不同的類。這些方法在getDataFromDB()方法內的某處被調用。現在,當我運行我的應用程序時,它不會發生任何錯誤,也不會出現異常,只是在創建對象時從getDataFromDB()方法中調用其他兩個方法。如果我刪除這些行,即創建對象並調用這些方法,它會一直運行直到結束。如果我將它移開並放在某個地方,它會再次運行,然後停止。我不知道發生了什麼或爲什麼。 Thanx提前幫助我。

+0

您是如何驗證呼叫在特定線路停止的?如果您使用調試器來驗證,請確保您運行最新的代碼。 – Adi

+0

多個syso語句。對象初始化之前的行被打印出來,然後沒有任何東西被執行。 –

+0

可以粘貼getDataFromDB()方法嗎? – alpert

回答

0

我總是用這樣的:

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); 
      } 
     } 
    } 

我可以把它變成一個類,我沒有問題。 當然,你必須在Quartz.properties中定義de數據源。 希望這有助於!

相關問題